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

Работа с "вкладками" в самодельном браузере - Objective-C

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Objective-C Сделать собственный алерт http://www.cyberforum.ru/objective-c/thread1402971.html
Помогите пожалуйста сделать алерт... что не пробовал на него просто не действует, он либо базовый либо никакой(( нашел даже код в котором человек уже менял алерт - но у меня он отображается пустым... изначально пытался впихнуть в него UITableView ...но потом оказалось что не в состоянии вообще ничего сделать с ним...либо базовый - либо пустой
Objective-C Пост запрос обработка результата - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { ; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { ; http://www.cyberforum.ru/objective-c/thread1401331.html
Objective c ошибка в коде Objective-C
Помогите пожалуйста разобраться в чем ошибка ) #import <Foundation/Foundation.h> @interface complex: NSObject -(void) setReal: (double) a; -(void) setImaginary: (double) b; -(void) print; -(double) real;
NSTableview hover эффект, Mac Objective-C
Ребят , привет, подскажите как сделать hover эффект? есть таблица, есть класс(объект) всё делегировал как положено(date source + delegate) заполняю таблицу программно, всё в порядке а как сделать hover хз, бьюсь бьюсь - ничего. Спасайте) при hover планирую отображать доп. кнопки и менять бг. P.S. делаю для mac
Objective-C Прозрачный UIViewController http://www.cyberforum.ru/objective-c/thread1399378.html
Всем привет хочу сделать поверх одного вьюконтролера другой с прозрачностью, выставил альфа каналы , убрал бекграунды, юзал такие варианты как setModalPresentationStyle:UIPresentationCurrentContext и т п, но получается что пока форма появляется (выдвигается снизу) она полупрозрачная - а потом становится непрозрачной... дайте код правильный)
Objective-C Скиньте исходники VK приложения Нужен исходный код офф клиента VK, если такой имеется не могли бы скинуть ссылку где его найти. Исходник нужен чисто в учебных целях. подробнее

Показать сообщение отдельно
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
27.03.2015, 13:11  [ТС]     Работа с "вкладками" в самодельном браузере
Сегодня снова копался как удаляются объекты из NSMutableArray. Не смотря на то что я задаю удалять тот объект что соответствует активной вкладке, все равно удаляется первый объект в списке. То есть получается корректное закрытие вкладки только при условии если я закрываю первую вкладку.
Прочитал кучу статей по поводу NSMutableArray и метода removeObjectAtIndex, но так и не нашел почему так происходит, не смотря на то что я указал условия, какой именно объект удалять

Добавлено через 2 часа 45 минут
Мне подсказали что использовать нужно не didCloseTabViewItem, а willCloseTabViewItem для того что находился нужный объект и удалялся. Я проверил и действительно это так.
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
- (void)webView:(WebView *)sender didReceiveTitle:(NSString *)title forFrame:(WebFrame *)frame
{
    NSLog(@"didReceiveTitle!");
   NSTabViewItem *tabViewItem = nil;
    
    for (int i = 0; i < [browserViews count]; i++)
        if (browserViews[i] == sender)
            tabViewItem = [tabView tabViewItemAtIndex:i];
    
    [searchField setStringValue:@""];
    [tabViewItem setLabel:[[frame webView] stringByEvaluatingJavaScriptFromString:@"document.title"]];
}
 
- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
{
    NSLog(@"createWebViewWithRequest!");
    return [self addWebView:[request URL]];
 
}
- (void)tabView:(NSTabView *)aTabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem {
    NSUInteger index = [aTabView indexOfTabViewItem:tabViewItem];
    NSLog(@"didSelectTabViewItem Индекс %ld", (long)index);
    
    if ([browserViews count] > index)
    {
        for (NSView *view in browserViews)
            [view setHidden:true];
        ERBrowser *browserView = browserViews[index];
        [browserView setHidden:false];
        NSLog(@"Индекс при изменении фокуса по табам %ld", (long)index);
        
        [searchField setStringValue:@""];
        [tabViewItem setLabel:[browserView stringByEvaluatingJavaScriptFromString:@"document.title"]];
    }
     
}
 
- (void)tabView:(NSTabView *)aTabView willCloseTabViewItem:(NSTabViewItem *)tabViewItem
{
 
    NSUInteger index = [aTabView indexOfTabViewItem:[tabView selectedTabViewItem]];
        NSLog(@"willCloseTabViewItem Индекс %ld", (long)index);
   if ([browserViews count] > index)
   {
        [browserViews removeObjectAtIndex:index];
        NSLog(@"%@" @"%ld", browserViews, (long)index);
   }
}
Теперь удаляется нормально. Но по сути проблема осталась. Получается так что вкладка номер 1 получается индекс объекта 0, а вкладка номер 2 индекс объекта 1.
В логах я вижу что все корректно удаляется. Но после удаления вкладки номер 2, остается вкладка номер 1 не со своим содержимым, а с содержимым только что закрытой вкладки.
Программа загрузилась и открылась дефаултная вкладка с google.com :
2015-03-26 16:53:53.500 ERClient[88528:25733277] didSelectTabViewItem Индекс 0
2015-03-26 16:53:53.639 ERClient[88528:25733277] ("<ERBrowser: 0x6080001237a0>")
2015-03-26 16:53:54.996 ERClient[88528:25733277] didReceiveTitle!
Открываю gmail в новой вкладке :
2015-03-26 16:55:41.454 ERClient[88528:25733277] createWebViewWithRequest!
2015-03-26 16:55:41.455 ERClient[88528:25733277] didSelectTabViewItem Индекс 1
2015-03-26 16:55:41.460 ERClient[88528:25733277] ("<ERBrowser: 0x6080001237a0>",
"<ERBrowser: 0x608000127bc0>")
2015-03-26 16:55:42.876 ERClient[88528:25733277] didReceiveTitle!
2015-03-26 16:55:46.300 ERClient[88528:25733277] didReceiveTitle!
2015-03-26 16:55:47.051 ERClient[88528:25733277] didReceiveTitle! - вот это меня смутило, почему это действие произошло 3 раза, а не как должно быть 2. Ведь вкладок всего 2 на данный момент.
На данный момент открыта вкладка 2 с индексом 1, я перевожу фокус на первую с ондексом 0, а потом возвращаю обратно:
2015-03-26 16:58:13.042 ERClient[88528:25733277] didSelectTabViewItem Индекс 0
2015-03-26 16:58:13.046 ERClient[88528:25733277] Индекс при изменении фокуса по табам 0
2015-03-26 16:58:15.607 ERClient[88528:25733277] didSelectTabViewItem Индекс 1
2015-03-26 16:58:15.608 ERClient[88528:25733277] Индекс при изменении фокуса по табам 1
Теперь я закрываю вкладку 2 с индексом 1:
2015-03-26 16:59:27.955 ERClient[88528:25733277] willCloseTabViewItem Индекс 1
2015-03-26 16:59:27.955 ERClient[88528:25733277] ("<ERBrowser: 0x6080001237a0>")1
2015-03-26 16:59:27.956 ERClient[88528:25733277] didSelectTabViewItem Индекс 0
2015-03-26 16:59:27.956 ERClient[88528:25733277] Индекс при изменении фокуса по табам 0

У меня остается 1 вкладка, на которой тайтл верный как и при старте программы, а содержимое от вкладки которую я только что закрыл.

Добавлено через 19 часов 4 минуты
В общем проблема возникла по той причине что у меня еще очень мало опыта и знаний во всем этом деле.
Когда я удалял объект из NSMutableArray все проходило хорошо, но загруженная WebView оставалась.
Нужно было добавить
Objective-C
1
[browserView removeFromSuperview];
и тогда все объекты связанные с данной вкладкой, начали удаляться корректно.
Возможно кому то пригодится, если будите делать браузер с вкладками или еще что то подобное

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (void)tabView:(NSTabView *)aTabView willCloseTabViewItem:(NSTabViewItem *)tabViewItem
{
 
    NSUInteger index = [aTabView indexOfTabViewItem:[tabView selectedTabViewItem]];
 
   if ([browserViews count] > index)
   {
       ERBrowser *browserView = browserViews[index];
       
       [browserViews removeObjectAtIndex:index];
       
       [browserView removeFromSuperview];
 
   }
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru