【发布时间】:2011-12-11 09:24:55
【问题描述】:
我找不到合适的示例,当用户在主视图中选择某些内容时,我应该如何在详细视图中呈现新视图?
【问题讨论】:
标签: ios ipad ios5 storyboard
我找不到合适的示例,当用户在主视图中选择某些内容时,我应该如何在详细视图中呈现新视图?
【问题讨论】:
标签: ios ipad ios5 storyboard
也没有找到任何东西。可行的解决方案是继续为每个视图(或至少复杂的视图)制作故事板,并让 appDelegate 类包含它们。我真的很惊讶故事板 ide 不允许添加子视图...如果还没有的话,可能会在下一次更新中。
【讨论】:
Matthijs Hollemans 的书"ios5 by tutorials" 包括如何在 ipad 上使用故事板。但是那本书需要购买,机器人免费。我只是想找到示例代码,但失败了。
【讨论】:
您可以按照以下方式进行操作。
@protocol MyDataDelegate
- (void)sendDataToView:(MyData *)data;
@end
【讨论】:
@interface DetailViewController : UIViewController
- (void)sendDataToView:(MyData *)data
{
// your code how to display data.
}
【讨论】:
使用 Xcode 4 创建主从应用程序项目模板。转到情节提要文件,展开主视图并通过选择名为“Detail”的默认静态单元格并按 Cmd + D 添加另一个静态单元格。将新的静态单元格命名为“Hello”(或任何您喜欢的名称。) 现在在你的 MasterViewController.m 文件中,实现这个:
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.detailViewController setDetailItem:[[[tableView cellForRowAtIndexPath:indexPath] textLabel] text]];
}
本示例将在 detailViewController 中的默认标签设置为 masterViewController 的选定单元格名称。 注意 setDetailItem: 方法接受一个 id 参数,在这个例子中你传递一个 NSString *。
【讨论】:
@property (assign,nonatomic) id delegate;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (delegate!=nil) {
// get your data here { your code here }
[delegate sendDataToView:data];
}
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
// set the view controller here
UINavigationController *masterNavController = [splitViewController.viewControllers objectAtIndex:0];
MasterViewController *masterViewController = [masterNavController.viewControllers objectAtIndex:0];
UINavigationController *detailNavController = [splitViewController.viewControllers objectAtIndex:1];
DetailViewController *detailViewController = [detailNavController.viewControllers objectAtIndex:0];
masterViewController.delegate = detailViewController;
return YES;
}
【讨论】: