Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
#1

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

08.03.2015, 19:37. Просмотров 657. Ответов 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. Открывать всегда в новой вкладке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2015, 19:37
Ответы с готовыми решениями:

Закрытие вкладок в sPageControl
Помогите с кодом закрытия вкладок. Суть такова есть допустим 5 вкладок закрываем по одной вкладке....

Открытие/закрытие вкладок браузера
Добрый день. Нужен совет, может кто подскажет реально ли сделать как мне нужно. Есть на моем...

Mozilla Firefox, закрытие вкладок на автомате
Здравствуйте, подскажите есть ли возможность в Mozilla Firefox организовать автоматическое закрытие...

Произвольное закрытие Chrome и открытие двух определенных вкладок при запуске
Здравствуйте! Браузер Google Chrome произвольно закрывается через случайный промежуток времени....

Вызов модальной формы из модальной, нужно:закрытие последней и не закрытие первой.
1. Вызываю модальную форму из главной формы (немодальной). 2. Вызываю другую модальную форму из...

2
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
13.03.2015, 19:15  [ТС] #2
Кстати уже не актуально, я со всем разобрался Но как всегда появились новые вопросы.
0
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
15.03.2015, 15:54  [ТС] #3
Если кому вдруг будет нужно или интересно как как это сделать, то смогу поделится проектом. Тут уже не буду сейчас выкладывать, так как особого интереса в теме не проявили.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2015, 15:54

Создание вкладок
Нужно создать вкладки, пример как на скриншоте. Слева - меню, справа - панель, в которой...

Создание вкладок
Как в WinForm C# создать вкладки?

Блокировка вкладок
Добрый день! Подскажите как сделать, чтобы при работе в одной вкладке при открытии подчиненной...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru