我能够在两个视图控制器之间传递一个NSString,但是我无法通过另一个传递它。我的代码如下......
`- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)index`Path {
NSString *string1 = nil;
NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"items"];
string1 = [array objectAtIndex:indexPath.row];
//Initialize the detail view controller and display it.
ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:[NSBundle mainBundle]];
vc2.string1 = string1;
[self.navigationController pushViewController:vc2 animated:YES];
[vc2 release];
vc2 = nil;
}
在“ViewController 2”实现中,我可以通过执行以下操作在标题栏中使用“string1”....
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title = string1;
UIBarButtonItem *addButton = [[[UIBarButtonItem alloc]
initWithImage:[UIImage imageNamed:@"icon_time.png"]
style:UIBarButtonItemStylePlain
//style:UIBarButtonItemStyleBordered
target:self
action:@selector(goToThirdView)] autorelease];
self.navigationItem.rightBarButtonItem = addButton;
}
但我在右侧还有一个NavBar按钮,我想推送一个新视图
- (void)goToThirdView
{
ViewController3 *vc3 = [[ViewController3 alloc] initWithNibName:@"ViewController3" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:NESW animated:YES];
vc3.string1 = string1 ;
[vc3 release];
vc3 = nil;
}
如何将相同的字符串传递给第三个视图? (或第四)
答案 0 :(得分:1)
除了要在vc3中设置字符串,然后将其推入堆栈以确保在视图和导航栏绘制时它存在时,您应该使用的内容。这就是你在vc2中运行它的方式。
但是,作为应用程序设计的问题,在视图控制器之间直接传递值是不好的做法。理想情况下,您希望视图控制器是独立的,并且无论其他控制器在其之前执行或未执行,都能够运行。 (当您需要将应用程序恢复到中断点时,这变得非常重要。)如果使视图控制器相互依赖,则随着应用程序变大,应用程序将变得纠结和复杂。
在视图之间交换数据的最佳方法是将数据停放在普遍可访问的位置。如果它是应用程序状态信息,则将其置于用户默认值中,或者您可以放入应用程序委托的属性。如果它是用户数据,那么它应该进入专用数据模型对象(可以是单例或通过应用程序委托访问。)
答案 1 :(得分:0)
您可以找到我之前提到过的question代码示例。