Вызовите UINavigationController из подпредставления в UITableViewCell - PullRequest
0 голосов
/ 15 августа 2011

У меня есть табличное представление, в котором я разделил ячейки на подклассы. В эти ячейки я добавляю подпредставление UIView. При перемещении ячейки я добавляю еще один UIView в подкласс UITableViewCell.

Я хотел бы представить ModalViewController при нажатии кнопки во втором UIView (подпредставление в UITableViewCell). У меня нет навигационного контроллера в этом представлении, поэтому я передаю навигационный контроллер из контроллера представления, мое табличное представление находится внутри и вниз, ко второму UIView.

Здесь я называю это, как обычно, но ничего не происходит.

ComposeCommentViewController *ccvc = [[ComposeCommentViewController alloc] initWithNibName:@"ComposeCommentViewController" bundle:nil];
[navController presentModalViewController:ccvc animated:YES];

Кто-нибудь знает, что я могу сделать неправильно или у вас есть другое решение?

РЕДАКТИРОВАТЬ: Вот как я установить navController

Сначала я передаю его своему подклассу UITableViewCell.

if (feedCell == nil)
{
    feedCell = [[FeedCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    [feedCell setNavigationControllerForSlidedView:[self navigationController]];
}

У подкласса есть метод setNavigationControllerForSlidedView:, который выглядит следующим образом:

- (void)setNavigationControllerForSlidedView:(UINavigationController *)navController
{
    [feedSlidedView setNavController:navController];
}

По моему FeedSlidedView я объявил и синтезировал UINavigationController *navController;

1 Ответ

4 голосов
/ 16 августа 2011

То, как вы это делаете, идет вразрез с практиками проектирования MVC (модель-представление-контроллер).У вас есть ряд механизмов для достижения того, что вы хотите в рамках MVC, которую Apple предоставляет в своем SDK.Вероятно, самым простым, на мой взгляд, было бы добавить целевое действие к кнопке в подпредставлении вашего UITableViewCell.В методе tableView:cellForRowAtIndexPath: вашего контроллера представления добавьте что-то вроде следующего:

[button addTarget:self action:@selector(presentComposeComment:) forControlEvents:UIControlEventTouchUpInside];

В этом случае self будет UIViewController, который отвечает за рассматриваемый UITableView.Затем вы должны включить метод для селектора выше в этом контроллере представления:

- (void)presentComposeComment:(id)sender {
    ComposeCommentViewController *ccvc = [[ComposeCommentViewController alloc] initWithNibName:@"ComposeCommentViewController" bundle:nil];
    [self presentModalViewController:ccvc animated:YES];
}

Обратите внимание, что я посылаю сообщение presentModalViewController:animated: не на контроллер навигации, а скорее в контроллер представления.

...