Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
#1

MMTabBarView закрытие вкладок - Objective-C

08.03.2015, 19:37. Просмотров 583. Ответов 2
Метки нет (Все метки)

Всем привет.
Сделал веб браузер и с использованием MMTabBarView для создание вкладок как в хроме или сафари, но не могу до конца разобраться как добавить на возможность их закрытия. Получается так что если я открываю ссылку в новой в кладке, то закрыть нельзя.
Хотя мне нужно немного хитрее сделать, что бы первая вкладка не закрывалась, а все остальные можно было бы закрыть.
Суть в том что в первой вкладке грузится сайт с игрой, а все остальные вкладки буду использовать для открытия форума или информации о персонажах.
Вот код :
AppDelegate.m
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#import "AppDelegate.h"
#import "MainWindowController.h"
 
@implementation AppDelegate
 
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
   // Insert code here to initialize your application
   
   mainWindowController = [[MainWindowController alloc] initWithWindowNibName:@"MainWindow"];
   [mainWindowController showWindow:self];
   [mainWindowController addWebView:[NSURL URLWithString:@"http://www.neverlands.ru"]];
}
 
@end
MainWindowController.m
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#import "MainWindowController.h"
#import "BrowserView.h"
 
 
@interface MainWindowController ()
 
@end
 
@implementation MainWindowController
 
- (id)initWithWindow:(NSWindow *)window
{
   if (self = [super initWithWindow:window])
   {
      browserViews = [[NSMutableArray alloc] init];
   }
   
   return self;
}
 
- (void)windowDidLoad
{
   [super windowDidLoad];
   
   for (NSTabViewItem *item in [tabView tabViewItems])
      [tabView removeTabViewItem:item];
   
   [tabView setAutoresizesSubviews:true];
   [searchField setDelegate:self];
 
   
   [tabBarControl setDelegate:self];
}
 
- (BrowserView *)addWebView:(NSURL *)url
{
   for (NSView *view in browserViews)
      [view setHidden:true];
   
   NSTabViewItem *tabViewItem = [[NSTabViewItem alloc] init];
   [tabViewItem setLabel:@"New Tab"];
   [tabView addTabViewItem:tabViewItem];
   [tabView selectTabViewItem:tabViewItem];
   
   BrowserView *browserView = [[BrowserView alloc] initWithFrame:mainView.frame];
   [browserView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
   [mainView addSubview:browserView];
   [browserViews addObject:browserView];
   
   [browserView setUIDelegate:self];
   [browserView setFrameLoadDelegate:self];
   
   if (url)
      [[browserView mainFrame] loadRequest:[NSURLRequest requestWithURL:url]];
   
   return browserView;
}
 
//Open player info or web
- (void)controlTextDidEndEditing:(NSNotification *)notification
{   
   if ( [[[notification userInfo] objectForKey:@"NSTextMovement"] intValue] == NSReturnTextMovement )
   {
      // Assume first subview of select tabViewItem view is browserView
      NSInteger index = [tabView indexOfTabViewItem:[tabView selectedTabViewItem]];
      BrowserView *browserView = browserViews[index];
      
      NSLog(@"Return was pressed!");
      NSString *text = [searchField stringValue];
      
      
      if ([text rangeOfString:@" "].location != NSNotFound) 
      {
         text = [text stringByReplacingOccurrencesOfString:@" " withString:@"+"];
 
         text = [NSString stringWithFormat:@"%@%@", @"http://neverlands.ru/pinfo.cgi?", text]; // Player info
         [[browserView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:text]]];
      }
      else
      {
         if ([text hasPrefix:@"http://"] || [text hasPrefix:@"https://"])
            [[browserView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:text]]];
         else if ([text rangeOfString:@".ru"].location != NSNotFound)
         {
            text = [NSString stringWithFormat:@"%@%@", @"http://", text];
            [[browserView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:text]]];
         }
         else
         {
            text = [text stringByReplacingOccurrencesOfString:@" " withString:@"+"];
            
            text = [NSString stringWithFormat:@"%@%@", @"http://neverlands.ru/pinfo.cgi?", text]; // Player info
            [[browserView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:text]]];
         }
      }
   }
}
 
- (void)webView:(WebView *)sender didReceiveTitle:(NSString *)title forFrame:(WebFrame *)frame
{
 
   NSTabViewItem *tabViewItem = nil;
   for (int i = 0; i < [browserViews count]; i++) // find tabViewItem relative to sender WebView
      if (browserViews[i] == sender)
         tabViewItem = [tabView tabViewItemAtIndex:i];
   
   [searchField setStringValue:[[frame webView] mainFrameURL]];
   [tabViewItem setLabel:[[frame webView] stringByEvaluatingJavaScriptFromString:@"document.title"]];
}
 
// Method called when webView javascript requests new window with request
- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
{
   return [self addWebView:[request URL]];
}
 
//Open forum, wiki and ...
- (IBAction)bookmarkButton:(NSButton*)sender
{
   BrowserView *browserView = [browserViews objectAtIndex:[tabView indexOfTabViewItem:[tabView selectedTabViewItem]]];
   [[browserView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[sender alternateTitle]]]];
}
 
 
 
// MMTabBarVievDelegate
- (void)tabView:(NSTabView *)aTabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem
{
   NSInteger index = [aTabView indexOfTabViewItem:tabViewItem];
   
   if ([browserViews count] > index)
   {
      for (NSView *view in browserViews)
         [view setHidden:true];
      
      BrowserView *browserView = browserViews[index];
      [browserView setHidden:false];
      
      [searchField setStringValue:[browserView mainFrameURL]];
      [tabViewItem setLabel:[browserView stringByEvaluatingJavaScriptFromString:@"document.title"]];
   }
}
 
- (void)tabView:(NSTabView *)aTabView didCloseTabViewItem:(NSTabViewItem *)tabViewItem
{
   NSInteger index = [aTabView indexOfTabViewItem:tabViewItem];
   
   if ([browserViews count] > index)
   {
      [browserViews removeObjectAtIndex:index];
   }
}
 
 
 
@end
И второй вопрос, в коде еще реализовано открытие информации о персонаже или же сайта. Так вот тоже не могу понять как сделать что бы при вводе чего либо в это поле, открывалось не в текущей вкладке, а в новой,
Так же есть ссылки на панели, тоже не пойму как сделать что бы они открывались в новой вкладке.

Вот так это сейчас выглядит :
http://firepic.org/thumbs/2015-03/08/bto6ab8semdc.png
1. Не закрывать и не открывать какие либо другие сайты кроме заданного.
2. Сделать возможность закрыть вкладки.
3. Открывать всегда в новой вкладке.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2015, 19:37     MMTabBarView закрытие вкладок
Посмотрите здесь:

Delphi Закрытие вкладок в sPageControl
Создание вкладок C# .NET 3.x
Создание вкладок C#
Активность вкладок C#
Delphi Переключение вкладок
Вызов модальной формы из модальной, нужно:закрытие последней и не закрытие первой. Delphi
Блокировка вкладок MS Access
Создание вкладок Assembler
Произвольное закрытие Chrome и открытие двух определенных вкладок при запуске
C# Создание вкладок
HTML, CSS стили вкладок
JavaScript Открытие/закрытие вкладок браузера

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
13.03.2015, 19:15  [ТС]     MMTabBarView закрытие вкладок #2
Кстати уже не актуально, я со всем разобрался Но как всегда появились новые вопросы.
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
15.03.2015, 15:54  [ТС]     MMTabBarView закрытие вкладок #3
Если кому вдруг будет нужно или интересно как как это сделать, то смогу поделится проектом. Тут уже не буду сейчас выкладывать, так как особого интереса в теме не проявили.
Yandex
Объявления
15.03.2015, 15:54     MMTabBarView закрытие вкладок
Ответ Создать тему
Опции темы

Текущее время: 18:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru