2013-04-01 3 views
0

Я работаю над приложением с контроллером с раздельным просмотром. Мастер является подклассом контроллера панели вкладок и является делегатом контроллера разделенного представления. Эта часть, кажется, работает нормально, и она нажимает правильную информацию на детальную сторону - за исключением элемента кнопки панели, который генерирует контроллер разделенного представления.Не удалось добавить элемент в UIToolbar

У меня есть UIToolbar, который был вытащен в Xcode на единственный контроллер подробного представления в проекте. Я установил выход для общедоступного API в Xcode, используя ctrl-drag.

Также объявлено в публичном API как UIBarButtonItem * splitViewBarButtonItem, объявлен слабым, неатомным.

Вот сеттер для этого элемента:

-(void)setSplitViewBarButtonItem:(UIBarButtonItem *)barButtonItem 
{ 
    NSLog(@"%@ setSplitViewBarButtonItem to %@ (%@)",self,barButtonItem,barButtonItem.title); 
    //UIToolbar *toolbar = [self toolbar]; 
    UIToolbar *toolbar = self.toolbar; 
    NSLog(@"toolbar[0] before adding the barButtonItem is %@",toolbar.items[0]); 
    NSMutableArray *toolbarItems = [toolbar.items mutableCopy]; 
    if (_splitViewBarButtonItem) 
    { 
     NSLog(@"Removing _splitViewBarButtonItem from toolbarItems"); 
     [toolbarItems removeObject:_splitViewBarButtonItem]; 
     NSLog(@"toolbarItems[0] is %@",toolbarItems[0]); 
    } 
    if (barButtonItem) 
    { 
     NSLog(@"#####"); 
     NSLog(@"Now adding %@ to toolbarItems",[barButtonItem description]); 
     [toolbarItems insertObject:barButtonItem atIndex:0]; 
     NSLog(@"toolbarItems[0] is %@",[toolbarItems[0] description]); 
     NSLog(@"#####"); 
    } 
    self.toolbar.items = [toolbarItems copy]; 
    NSLog(@"self.toolbar.items[0] is %@",self.toolbar.items[0]); 
    _splitViewBarButtonItem = barButtonItem; 
} 

В первый раз через, он ведет себя так, как ожидалось:

2013-04-01 10:33:46.270 SPoT[10389:907] <IViewController: 0x1e066430> setSplitViewBarButtonItem to <UIBarButtonItem: 0x1cd65490> (Text appearing on the button) 
2013-04-01 10:33:46.272 SPoT[10389:907] toolbar[0] before adding the barButtonItem is <UIBarButtonItem: 0x1cd65400> 
2013-04-01 10:33:46.275 SPoT[10389:907] ##### 
2013-04-01 10:33:46.277 SPoT[10389:907] Now adding <UIBarButtonItem: 0x1cd65490> to toolbarItems 
2013-04-01 10:33:46.278 SPoT[10389:907] toolbarItems[0] is <UIBarButtonItem: 0x1cd65490> 
2013-04-01 10:33:46.280 SPoT[10389:907] ##### 
2013-04-01 10:33:46.288 SPoT[10389:907] self.toolbar.items[0] is <UIBarButtonItem: 0x1cd65490> 

Однако, если я использую кнопку, чтобы активировать мастер, что делает кнопка исчезает и использует мастер для обновления экрана подробных данных новыми данными, передача кнопки не выполняется. Я проследил проблему с этим методом, когда кнопка отображается, но она не обновляется. Вот результат отладчика от второго:

2013-04-01 10:33:53.491 SPoT[10389:907] <IViewController: 0x1e09fad0> setSplitViewBarButtonItem to <UIBarButtonItem: 0x1cd65490> (Text appearing on the button) 
2013-04-01 10:33:53.492 SPoT[10389:907] toolbar[0] before adding the barButtonItem is (null) 
2013-04-01 10:33:53.493 SPoT[10389:907] ##### 
2013-04-01 10:33:53.494 SPoT[10389:907] Now adding <UIBarButtonItem: 0x1cd65490> to toolbarItems 
2013-04-01 10:33:53.495 SPoT[10389:907] toolbarItems[0] is (null) 
2013-04-01 10:33:53.496 SPoT[10389:907] ##### 
2013-04-01 10:33:53.497 SPoT[10389:907] self.toolbar.items[0] is (null) 

Обратите внимание, что отладчик трассировка состояние «Теперь добавление», так что элемент доступен. Так почему он не добавляется?

Редактирование: теперь я думаю, что, поскольку «панель инструментов [0] перед добавлением barButtonItem (null)» указывает, что сегмент, сгенерировавший идентификатор объекта нового контроллера детали, не полностью создал этот объект, свойство панели инструментов еще не существует. Думаю, мне придется выяснить, как добавить элемент кнопки панели позже в этом процессе.

ответ

0

Не уверен, что это лучшее решение, но я решил, что элемент бара не добавлялся в заголовок, так это то, что заголовок еще не был добавлен в новый объект VC детали, предоставленный segue. Я решил эту проблему, добавив следующую строку в деталях метод viewDidLayoutSubviews ВК:

self.splitViewBarButtonItem = self.splitViewBarButtonItem; 

Это снова вызывает сеттер, но на этот раз после заголовка существует.

Смежные вопросы