我最近开始了iOS应用开发。
我有一个关于从UITableViewController到UIViewController的segue的问题。 单击一个表格单元时,不会调用“prepareForSegue”。
在我看来,代码和界面构建器设置很好。 Segue ID已正确设置。我也在navigationVC中嵌入了UITableVC。 我在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 :(得分:1)
当我使用时:
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellIdentifier]; 在viewDidLoad
中UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath] in cellForRowAtIndexPath
不会调用prepareForSegue。
当我在viewDidLoad和
中删除registerClass行时UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
在cellForRowAtIndexPath中,将调用prepareForSegue,其他设置都相同。
答案 1 :(得分:0)
确保在Mainstoryboard中嵌入了UITableViewController的导航控制器。或者尝试在项目的rootViewController中嵌入导航控制器。然后在tableviewcell中设置重用标识符。有任何问题请分享。