2013-08-16 2 views
0

Недавно я начал разработку приложений для iOS.prepareForSegue не вызывается из UITableViewController

У меня проблема с segue от UITableViewController до UIViewController. «prepareForSegue» не вызывается при нажатии на столбец.

Мне кажется, что настройки компоновщика кода и интерфейса в порядке. Значок Segue правильно установлен. Я также встроил UITableVC в navigationVC. Я установил точку останова в файле prepareForSegue, но он не останавливается на этом и не создается журнал.

С помощью исследования советов в Интернете я понимаю, что использование didSelectRowAtIndexPath является одним из решений для моей проблемы. Но я хотел бы понять решение, используя раскадровку.

Это может быть основной вопрос, но если кто-то может дать мне несколько советов, это может быть очень полезно.

спасибо,

@interface test2TVC() 
@property(strong,nonatomic) NSArray *items; 
@end 

@implementation test2TVC 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.items = @[@"item1", @"item2", @"item3", @"item4", 
       @"item5", @"item6", @"item7", @"item8"]; 

} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSLog(@"test log"); 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [self.items count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"]; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
    cell.textLabel.text = [self.items objectAtIndex:indexPath.row]; 
    return cell; 
} 
@end 
+0

Вы подтолкнули segue к своему табло? –

+0

Является ли ваш segue из ячейки прототипа UITableView целевым контроллером View в раскадровке? –

+0

Кришна и codeInOrange, большое спасибо за комментарий к моему вопросу! Да, я нажал UITableViewController на целевой ViewController. Вместо использования действий доступа. Segue выталкивается из UITableViewCell не из UITableViewController в раскадровке. – mickmk

ответ

0

Убедитесь, что вы встроили Навигационный контроллер ваш UITableViewController в Mainstoryboard. или попытаться встроить контроллер навигации в rootViewController вашего проекта. Затем установите идентификатор повторного использования в tableviewcell. Любая проблема, пожалуйста, поделитесь им.

+0

Большое спасибо за советы. Я убедился, что UITableViewContoroller встроен в контроллер навигации. Но prepareForSegue не был вызван. Затем я удалил UITableViewController и UINavigationController и попытался использовать RootViewController (перетащить его из области использования xCode). Но, к сожалению, это не сработало хорошо. Его идентификатор повторного использования, идентификатор segue кажется прекрасным. Segue из UITableViewController в destinationViewController - это push (не действие accessary). UITableViewController и UIViewController правильно назначены каждому классу контроллера представления. – mickmk

1

Когда я использую:

[self.tableView RegisterClass: [UITableViewCell класс] forCellReuseIdentifier: CellIdentifier]; в viewDidLoad

UITableViewCell * ячейка = [Tableview dequeueReusableCellWithIdentifier: CellIdentifier forIndexPath: indexPath] в cellForRowAtIndexPath

prepareForSegue не будет называться.

Когда я удалить RegisterClass линию в viewDidLoad и

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

в cellForRowAtIndexPath, prepareForSegue будет называться, другие настройки все же.

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