Выдвижение представления в раскадровке - PullRequest
1 голос
/ 11 февраля 2012

Я пытаюсь использовать Table Views и контроллеры навигации. Этот код я бы использовал, если бы использовал файлы NIB. Этот фрагмент кода работал бы нормально, если бы я использовал файлы NIB, но я решил попробовать раскадровку -

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

if (_webViewController == nil) {
    self.webViewController = [[[WebViewController alloc] initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]] autorelease];
}
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
_webViewController.entry = entry;
[self.navigationController pushViewController:_webViewController animated:YES];
}

Я создал еще одну сцену в раскадровке, и там все настроено. Когда пользователь щелкает ячейку в этом табличном представлении, он попадает в эту сцену. Это то, что я написал для кода, но это неправильно, и я безнадежно застрял :( -

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"articleView"]){
    UINavigationController *navigationController = segue.destinationViewController;
    WebViewController *controller = (WebViewController *)navigationController.topViewController;
    controller.webView = self;
 }

Ответ - Ответы 2 и 3 являются правильными

Ответы [ 3 ]

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

Если ваше табличное представление уже встроено в контроллер навигации (выглядит так, из вашего первого фрагмента кода), тогда контроллером представления вашей цели будет WebViewController, а не контроллер навигации.

Таким образом, ваш метод prepareForSegue может передавать элемент напрямую через:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"articleView"])
    {
        WebViewController *controller = (WebViewController *)segue.destinationViewController;
        RSSEntry *entry = [_allEntries objectAtIndex:[self.tableView indexPathForSelectedRow].row];
        controller.entry = entry;
    }
}
2 голосов
/ 11 февраля 2012

У меня была очень похожая проблема 2 дня назад, когда пользователь выбирал аксессуар раскрытия в строке и хотел вызвать переход. Что сработало для меня:

  1. В раскадровке создайте переход "articleView" от всего контроллера tableView (не ячейки) до следующего viewController.
  2. Добавьте следующий метод к вашему tableViewController:
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {  
    [self performSegueWithIdentifier:@"articleView" sender:[self.tableView cellForRowAtIndexPath:indexPath]];
}

Только для вас я также тестировал с tableView: didSelectRowAtIndexPath: и это работает.

Наслаждайтесь

Дэмиен

1 голос
/ 11 февраля 2012

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

http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...