【发布时间】:2010-11-20 08:56:17
【问题描述】:
这可以更动态地设置而不是硬编码吗?
self.title = @"My Title";
// ^^^^^^^^^^^
我希望标题是用户单击的行的名称,而不是硬编码标题名称
在我的 viewController 中,我有州名。我希望标题是用户点击的州名。有什么建议吗?
提前致谢
【问题讨论】:
标签: iphone objective-c iphone-sdk-3.0
这可以更动态地设置而不是硬编码吗?
self.title = @"My Title";
// ^^^^^^^^^^^
我希望标题是用户单击的行的名称,而不是硬编码标题名称
在我的 viewController 中,我有州名。我希望标题是用户点击的州名。有什么建议吗?
提前致谢
【问题讨论】:
标签: iphone objective-c iphone-sdk-3.0
你的问题不是很清楚。一般来说,你可以将当前视图的标题设置为任何 NSString 对象,所以
self.title = string;
但是我猜你的问题是你是否可以设置一个视图的图块,当你点击一个 UITableViewCell 时,它会被创建并进入视图。如果是这样,答案是肯定的,你可以。您可以在创建新视图时在视图控制器的 tableView:didSelectRowAtIndexPath: 方法中执行此操作。
您需要将 indexPath 变量或单元格 cell.textLabel.text 中的文本标签传递给自定义初始化方法。因此,如果您有一个名为 nextController 的视图控制器,例如,您会执行类似的操作,
NextController *next = [[NextController alloc] initWithIndexPath: indexPath];
[appDelegate.navController pushViewController:next animated: YES];
[next release];
在主控制器的 tableView:didSelectRowAtIndexPath: 方法中。然后在您的 NextController 类中,您将按照这些思路覆盖 init 方法,
-(id)initWithIndexPath: (NSIndexPath *)indexPath {
if ( self == [super init] ) {
indexVariable = indexPath;
}
return self;
}
在 @interface 中声明 indexVariable 之后。您需要做的就是在新控制器的 viewDidLoad: 方法中设置新视图的标题,或者使用 NSIndexPath 抓取单元格的标签,或者如果您直接而是通过了标签。
【讨论】:
Alasdair 的答案是正确的,但可能比您需要的更复杂。
在您的 tableView:didSelectRowAtIndexPath: 方法中,您可能有类似的内容(如在 Alasdair 的示例中):
ViewController *viewController = [[ViewController alloc] init]; //some flavor of "init"
[self.navController pushViewController:viewController animated: YES];
[viewController release];
你真正需要做的就是添加:
[viewController setTitle:<<the string you want to set it to here>>];
在上面的第一行之后。或者,您可以通过自定义 init 传递字符串,并从推送的视图控制器内部设置它。无论哪种方式。
但实际上没有必要将整个表视图暴露给底层视图控制器。
【讨论】: