我带有一个带有对象集合的uitableview。 当我点击UITableViewCell时再打开另一个UIView。 但我想发送UITableViewCell中的对象用于这个新的UIView并在那里显示它们的详细信息。 我接着回答了这个问题以加载另一个视图:ViewController Segue Xamarin 如果有人帮忙,我将非常感激
答案 0 :(得分:1)
在ViewController中覆盖PrepareForSegue以在目标控制器上设置参数。您需要在目标控制器上定义允许传递参数的公共方法或属性:
public override void PrepareForSegue (UIStoryboardSegue segue, NSObject sender)
{
if (segue.Identifier == "TaskSegue") { // set in Storyboard
var navctlr = segue.DestinationViewController as TaskDetailViewController;
if (navctlr != null) {
// some public method you create in your destination controller
navctlr.SetTask (this, item);
}
}
}
答案 1 :(得分:1)
有一些解决方案,第一个是使用 prepareForSegue(_:sender :)方法:
讨论 此方法的默认实现不执行任何操作;您 可以覆盖它以将相关数据传递给新的视图控制器或 窗口控制器,基于segue的上下文。 segue对象 描述转换并包括对两个控制器的引用 参与segue。
可以从多个来源触发Segues,因此请使用这些信息 在segue和sender参数之间消除不同的歧义 您应用中的逻辑路径。例如,如果segue源自a 在表视图中,sender参数将标识用户的单元格 点击。您可以使用该信息来设置数据 目标视图控制器。
在这种情况下,你需要“保存”你想传入的对象didSelectRow:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
self.currentObjectToPass = .. some object from array or somewhere else..
}
然后将其设置为下一个vc:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton*)sender {
if ([segue.identifier isEqualToString:@"bookingDetailsSegue"]) {
self.nextVC = segue.destinationViewController;
self.nextVC.objectToPass = self.currentObjectToPass;
}
}
另一种方法是拒绝使用segues并通过其storyboardID获取vc。
这种方式你需要 instantiateViewController(withIdentifier :)方法:
返回值视图控制器对应于指定的 标识符串。如果没有视图控制器与 string,此方法抛出异常。
讨论您可以使用此方法创建视图控制器对象 你想在你的程序中操作和呈现 应用。在使用此方法检索视图之前 控制器,您必须使用适当的标识符明确标记它 Interface Builder中的字符串。
此方法创建指定视图控制器的新实例 每次你打电话。
然后您的代码将如下所示:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
self.nextVC = [self.storyboard instantiateViewControllerWithIdentifier:@"nextVCID"];
self.nextVC.objectToPass = = .. some object from array or somewhere else..
[self.navigationController pushViewController:self.nextVC animated:YES];
}
不要忘记在IB中设置vc标识符(故事板ID):