我有一个静态的UITableview,我试图转向模态视图。我不能直接从故事板中的单元格中删除,因为有时我希望根据某些应用程序逻辑不调用segue。所以我把segue连接到TableViewController并在storyBoard中给它一个标识符。在TableViewController中我然后调用下面的方法。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//Perform segue when first row in first section is touched
if(indexPath.section == 0){
if(indexPath.row == 0){
[self performSegueWithIdentifier:@"view1" sender:self.view];
}}}
由于某种原因,当点击单元格时,模态视图显得很慢。我已经将NSLogs添加到模态视图viewDidLoad和viewDidAppear方法中,viewDidLoad被立即调用但viewDidAppear很慢。这似乎只发生在tableView加载后第一次点击单元格时。这似乎与didSelectRowAtIndex方法有关,因为我尝试从单元格上的按钮触发的IBAction调用performSegueWithIdentifier,它工作得很好。还有一点需要提一下,如果我取消选中segue上的动画复选框,它会立即生效。如果有人能提供帮助,我将非常感激。
答案 0 :(得分:4)
你可以直接从故事板中的单元格中删除。还有另一种委托方法可用于控制segue动作
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
[super shouldPerformSegueWithIdentifier:identifier sender:sender];
if ([identifier isEqualToString:@"SegueIdentifier"]) {
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
if (0 == indexPath.row) {
if (0 == indexPath.row) {
return YES;
}
}
}
return NO;
}
答案 1 :(得分:1)
这似乎是一个线程问题。只需将调用包装到performSegueWithIdentifier
,并将调度发送到主线程。就像黄油一样!
dispatch_async(dispatch_get_main_queue(), {
self.performSegueWithIdentifier("SegueName", sender:self)
})
答案 2 :(得分:0)
试试这个,因为发件人应该是控制器对象
(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//Perform segue when first row in first section is touched
if(indexPath.section == 0){
if(indexPath.row == 0){
[self performSegueWithIdentifier:@"view1" sender:self];
}
}
}
答案 3 :(得分:0)
我有同样的问题。我没有进行过广泛的测试,但它似乎发生在iOS 8.1而不是iOS 7.1.2中。奇怪的是,第二次进行放松时,延迟甚至更长。 (例如:点击按钮呈现UITableViewController,点击关闭按钮放松,重新打开它,重新关闭它 - 慢!)
当你呈现你的tableViewController时,你是否将任何内容传递给sender:
?我这样传递self
:
[self performSegueWithIdentifier:@"TableViewSegue" sender:self];
...但我发现传递nil
会使放松延迟几乎消失。有时它仍然在那里,但在iPhone 6上只有0.5秒左右。这样一个奇怪的问题。我还在unwind命令中取出了sender:self
,以防万一。
经过一些更多的测试后,大约有五分之一的时间它会以真的可怕的延迟展开...大约4-5秒!第二次点击这一行似乎实际上是立即放松了。但哇,这个bug非常讨厌。我们应该在其上提交错误报告:https://bugreport.apple.com/