Справочный вид для делегата приложения с использованием раскадровок - PullRequest
1 голос
/ 26 февраля 2012

Я пытаюсь создать UITableView, используя раскадровку, но я пришел к чему-то, что в конце может быть легко, но я понятия не имею, как его решить. Прежде всего позвольте мне отметить, что я знаю, что одно из ограничений раскадровок заключается в том, что вам придется копаться в раскадровке, чтобы найти информацию о вашем представлении и связать его с делегатом приложения. Я создал свой изменяемый массив и информацию, которую я буду использовать в таблице в делегате приложения, и теперь я хочу сослаться на этот UITableView делегату приложения. Иерархия выглядит так

  1. Во-первых, у меня есть корневой вид, который, как только вы нажмете кнопку, перенаправит вас на второй вид
  2. Внутри второго вида есть еще одна кнопка, которая, как только вы нажмете ее, перенаправит вас на UINavigationController
  3. UINavigationController содержит UITableView.

Поэтому, как вы можете видеть, перед навигационным элементом управления и UITableView есть два вида.

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

UIViewController *viewController = (UIViewController *)self.window.rootviewController;

// The next line refers to the second view but does not work at all
UIViewController *secondView = [[UIViewController viewController] objectAtIndex:1];

//Then the following line is to redirect from the second view to the navigation controller
UINavigationController *navigationController =[[secondView viewController] objectAtIndex:0];

//Then is the table view
BuildingsViewController *buildingsViewController = [[navigationController viewControllers] objectAtIndex:0];

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

1 Ответ

2 голосов
/ 26 февраля 2012

Если этот код находится в делегате приложения, существует множество причин, по которым он, вероятно, не будет работать. Во-первых, вы, кажется, смешиваете контролы View, ViewControllers и Navigation с тем, что вы пытаетесь сделать. Во-вторых, в то время, когда вы пытаетесь это сделать, нет гарантии, что все представления / контроллеры представлений еще не созданы или объединены в том виде, в каком они будут, когда рендерится конечный контроллер представления здания.

Вместо этого вы можете попробовать в своем BuildingsViewController (который вы называете контроллером табличного представления) вы можете получить дескриптор делегата приложения, используя

MyAppDelegate *myAppDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate

Получив дескриптор делегата, вы можете просто ссылаться на свою структуру изменяемого массива и т. Д., Которую вы создали на ней, внутри вашего BuildingsViewController.

например. в методе numberOfRowsInSection:

MyAppDelegate *myAppDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate
NSMutableArray *myBuildings = myAppDelegate.buildingArray;
return [myBuildings count];

Или в методе cellForRowAtIndexPath:

// something like this but using your names for app delegate, building array and the accessor for the building name
MyAppDelegate *myAppDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate
NSMutableArray *myBuildings = myAppDelegate.buildingArray;

cell.textLabel.text = [myBuildings objectAtIndex indexPath.row].theBuildingName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...