我的问题似乎是一般问题,但似乎无法找到答案。
我有一种情况,当用户点击自定义UITableViewCell时,我想显示一个警报,然后根据对警报的响应,保持在同一视图(用户选择取消)或显示另一个视图(如果用户选择继续)。我想使用故事板功能&塞格斯。
怎么会这样呢?你必须以老式的方式做到这一点吗?
答案 0 :(得分:11)
@user,只需以旧时尚的方式创建alertView;我知道任何故事板功能,以不同的方式做到这一点。故事板可以帮助的是segues。您可以通过编程方式调用segues。使用警报视图取消按钮,您可以返回(即什么都不做)。对于另一个选项,要显示另一个视图,您可以以编程方式调用segue以转换到所需的视图。如果您在故事板上没有为某些其他原因定义了正确的segue,只需创建一个按钮并使用它来创建segue并为其命名。通过在故事板中单击它来命名segue,并使用属性检查器为其命名(标识符)。然后隐藏按钮或将其放在视图之外。我通常在工具栏上放置这些类型的按钮,并使用垫片将它们排除在视图之外。这是一些示例代码:
从警报视图委托中调用segue,如下所示:
[self performSegueWithIdentifier: @"done" sender: self];
同时实现此方法以执行任何必要的任务以准备segue:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"done"])
{
// [[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];
// [[segue destinationViewController] setSelectedClient:selectedClient];
}
}
答案 1 :(得分:8)
您可以直接从startingViewController创建segues到多个destinationViewControllers,然后可以以编程方式“执行”。你不需要为它们创建任何隐藏的按钮,这看起来像是一个黑客。
答案 2 :(得分:4)
好的,我提出了一个与我喜欢的故事板保持一致的解决方案。
示例:
我的tableview有2个部分,分组,单元格是动态原型。第0节包含一行/ UITableViewCell&我不希望它发生变化。第1节包含我想要触发segue&的多个单元格。深入细节。
在故事板中:
在源视图控制器中:
在prepareForSegue方法中,我处理了从我的UIBarButtonItem(Add)控制拖动的常见'AddTimePeriod'segue,以及'generic'(vc - > vc)'EditTimePeriod'segue。 / p>
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// handle the click of the 'Add' bar button item
if([segue.identifier isEqualToString:@"AddTimePeriod"]) {
TimePeriodViewController* tpvc = (TimePeriodViewController*)segue.destinationViewController;
tpvc.delegate = self;
// database & entity stuff for adding the new one to the mOC, etc
}
// handle the click of one of the 'editable' cells -
if([segue.identifier isEqualToString:@"EditTimePeriod"]) {
TimePeriodViewController* tpvc = (TimePeriodViewController*)segue.destinationViewController;
tpvc.delegate = self;
TimePeriod * newTP = [self.timePeriodArray objectAtIndex:self.tableView.indexPathForSelectedRow.row];
tpvc.timePeriod = newTP;
}
}
然后我实现了tableView:didSelectRowAtIndexPath方法,并将我的条件放在这里。如果所选行在零之外,我手动调用EditTimePeriod segue,将发件人定义为选定的tableviewcell:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if(self.tableView.indexPathForSelectedRow.section!=0){
[self performSegueWithIdentifier:@"EditTimePeriod" sender:[tableView cellForRowAtIndexPath:indexPath]];
}
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
return;
}
很高兴在第0部分对单元格进行编码,因此首先不能选择它! 希望这会有所帮助。
**然后5分钟后我又看了一眼并意识到我可以将第0部分的数据移动到部分标题中,这更直观,而且无论如何都没有被使用。将设计从每个tableviewcell中打开以获得标准segue,而无需任何条件/检查。无论如何,这是一个很好的运动:)