我对 IOS 和 Objective-C 以及整个 MVC 范例很陌生,并且我坚持以下内容。
我正在开发(副本)联系人应用程序,也可以在 iPhone 中作为内置应用程序使用。我想通过另一个视图控制器传递数据,并且数据是 pass (null) :(。
我的问题是,如何将数据从一个视图传输到另一个视图?
正如您得到的大多数答案一样,在一个控制器和另一个控制器之间传递数据只是意味着将一个变量从一个控制器分配给另一个控制器。
如果您有一个控制器用于列出联系人,另一个控制器用于显示联系人详细信息,并且流程从列表开始并在选择联系人后转到详细信息,则可以分配联系人变量(可能是数组中的一个对象,该对象是显示在您的列表中)并在显示此之前将其分配给详细视图控制器。
- (void)goToDetailViewControllerForContact:(Contact *)c
{
ContactDetailViewController *detailVC = [[[ContactDetailViewController alloc] init] autorelease];
detailVC.contact = c;
[self.navigationController pushViewController:c animated:YES];
//[self presentModalViewController:detailVC animated:YES]; //in case you don't have a navigation controller
}
另一方面,如果您想将新联系人从详细信息控制器插入到列表控制器,我想最好的方法是将列表控制器作为委托分配给详细信息控制器,因此当添加联系人时,委托收到通知并按预期行事(将联系人插入数组并重新加载表视图?)。
@protocol ContactDelegate <NSObject>
- (void)contactWasCreated:(Contact *)c;
// - (void)contactWasDeleted:(Contact *)c; //may be useful too...
@end
@interface ContactListViewController : UIViewController <ContactDelegate>
@property (nonatomic, retain) NSArray *contacts;
...
@end
@implementation ContactListViewController
@synthesize contacts;
...
- (void)goToDetailViewControllerForContact:(Contact *)c
{
ContactDetailViewController *detailVC = [[[ContactDetailViewController alloc] init] autorelease];
detailVC.contact = c;
detailVC.delegate = self;
[self.navigationController pushViewController:c animated:YES];
//[self presentModalViewController:detailVC animated:YES]; //in case you don't have a navigation controller
}
- (void)contactWasCreated:(Contact *)c
{
self.contacts = [self.contacts arrayByAddingObject:c]; //I'm not sure this is the correct method signature...
[self reloadContacts]; //may be [self.tableView reloadData];
}
...
@end
@interface ContactDetailViewController : UIViewController
@property (nonatomic, assign) id<ContactDelegate> delegate;
...
@end
@implementation ContactDetailViewController
@synthesize delegate; //remember to don't release it on dealloc as it is an assigned property
...
- (void)createContactAction
{
Contact *c = [[[Contact alloc] init] autorelease];
[c configure];
[self.delegate contactWasCreated:c];
}
...
@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)