我想在UITableViewCell
从一个控制器向另一个控制器发送indexPath.row
。我可以使用removeObjectAtIndex
删除行,但无法将删除的行发送到另一个控制器。
我正在尝试将删除的行存储在一个控制器中的NSMutableArray
中,但不知道如何在另一个控制器中填充它。
以下是代码 -
ViewController *view= [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
view.anotherviewArray= [self.arrayFromAFNetworking objectAtIndex:indexPath.row];
如果有人能给我一个想法,那将会很有帮助。
答案 0 :(得分:2)
我认为保留UI元素并将其传递给您的应用是不好的做法。您应该使用某种包含数据的模型,并将此模型从一个视图控制器传递到另一个视图控制器。我建议查看tableview框架,例如免费的Sensible TableView框架,因为它们可以自动为您提供这样的模型。
答案 1 :(得分:1)
我个人认为将UI对象作为参数传递给另一个控制器是错误的方法。 正如我所做的那样,创建一些对象来封装来自此单元的数据模型,并将此对象传递给另一个视图控制器。
@interface DataObject : NSObject
@property id field1;
@end
单元格的UI部分可以在Interface Builder中轻松复制,所以我没有看到问题。可能有一个单元类可以用数据填充对象的必要字段会很棒。您可以在两个必须显示相同单元格的视图控制器中使用此类
@interface CustomTableViewCell : UITableViewCell
- (void)customizeCellWithDataObject:(DataObject *)dataObject;
@end
我希望你有意义
答案 2 :(得分:0)
假设您想要仅使用此行设置其他数据源,则需要将其作为数组传递。
view.anotherviewArray= [NSArray arrayWithObject:[self.arrayFromAFNetworking objectAtIndex:indexPath.row]];
但是从你提供的小代码中很难说出来。我假设您正在实例化viewController,您也在提供的代码下面转换到它。如果您正在尝试为已经呈现的viewController设置数组,则需要访问该数组,而不是创建另一个,可能是在当前viewController或其他可访问类中保存了对它的引用。
我也不会将ViewController命名为view
,对于以后阅读代码的人来说,这会让人感到困惑。
编辑以下关于遍历层次结构的评论。以下是我在一个iPad项目中使用的一些代码,用于返回最终呈现的viewController。此方法位于appDelegate中。它有些特定于我的项目,其中只有一个navigationController。但你可以适应你的。您将测试一个viewController,它是目标视图控制器的类。
- (UIViewController *)topViewController {
UIViewController *rootViewController = self.window.rootViewController;
UIViewController *topViewController = rootViewController.presentedViewController;
while (topViewController && topViewController.presentedViewController) {
topViewController = topViewController.presentedViewController;
if ([topViewController isKindOfClass:[UINavigationController class]]) {
UIViewController *presentedViewController = [(UINavigationController *) topViewController topViewController];
if (presentedViewController) {
topViewController = presentedViewController;
}
}
}
return topViewController;
}
另一种方法是在创建和呈现属性时为其设置属性。我们没有足够的代码来整体了解您的应用。您在哪里创建要显示的ViewController实例?我的意思是你在调用它的segue,或者将它推送到navigationController或调用presentViewController。无论在哪里,您都需要为其设置属性或ivar。假设您在appDelegate中使用属性作为一种非常通用的情况。
在您的MyAppDelegate.h文件中
@property(nonatomic,strong) ViewController *viewController;
无论您何时首次创建它,都要设置该属性
MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
appDelegate.viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
我现在认为你正在尝试将其添加到另一个ViewController中的mutableArray中。然后从上面的tableViewCell替换您将使用的代码 MyAppDelegate appDelegate =(MyAppDelegate )[[UIApplication sharedApplication] delegate]; [appDelegate.viewController.mutableDataArray addObject:self.arrayFromAFNetworking objectAtIndex:indexPath.row]; [appDelegate.viewController.tableView reloadData];
我会说使用appDelegate作为属性并不是一个好习惯。但这是一个通用的答案,可行。最好将它放在viewControllers中常用的类中,以便在它们之间传递数据。也许是拥有这两个viewControllers的单个父级?