1.使用Xcode4.2创建导航使用Single View application模板程序
需要选中Storyboard选项
2.创建成功后会看到一个Navigation Controller这就是一个导航控制器,负责控制画面导航。
选择Editor中的Embed in菜单在导航控制器中嵌入视图控制器,运行你的程序发现多了一点东西
运行:
3.这个时候没有对视图添加任何数据所以是空的,相信大家在学导航这个模块之前已经学过了View Table视图,那么我们添加一个ViewTable到右边的MyRecipeController里面去。
之后编辑这里的文件:
添加两个协议到头文件变量中去:UITableViewDelegate和UITableViewDataSource
然后再实现文件中添加数据,这些数据主要是为了在Table上显示
编辑之后将变量和视图直接建立联系:到StoryBoard中按住Ctrl键然后选择Table View视图拖到下面视图控制器的图标上去和DataSource和Delegate建立联系。
现在我们的导航条还没有名字,选择导航条修改名字:
运行程序出现:
4.现在每一行并没有什么标记和没有导航没有什么区别,我们在StoryBoard中添加一个原型单元格ProtoType Cell,当然也可以自己定制单元格。选择TableView切换到Attribute Inspector窗口设置ProtoType cell的值为1,style设置为Grouped,特别注意的是Indentifler的设置必须与CellForRowAtIndexPath的设置一致。
现在运行程序会出现会在每一行多一个图标,但是对每个行点击还是没有任何反应。
5.为每一行添加行为。
拖动一个view Controller 到右边的图上,然后为了简单在上面添加一个Label,目的了是为了每点击一次行都显示Lable上的文字。所以需要将每一个行和这个新添加的视图建立联系,这就是我们所说的segue。选择ProtoType Cell按住Crtl拖到到新的视图上即可出现三个选项,这里选择push
现在运行程序每次点击一次行都会跳到这个视图中去。
6.数据传递:我们假设想要将每个行的文字传给下个视图的label上显示。
新添加的视图默认是UIViewController类。新建了一个类继承这个UIViewController。在类中添加一个变量存储Label上的显示数据,一个用于数据传递的变量。建立变量于label之间的关联,还是ctrl+拖动。并添加一个方法:
- (void)viewDidLoad
{
[super viewDidLoad];
recipeLabel.text = recipeName;
}
现在要做的是使用连线传递数据了。
在住ViewController 文件中添加一个方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showRecipeDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
RecipeDetailViewController *destViewController =
segue.destinationViewController;
destViewController.recipeName = [recipes objectAtIndex:indexPath.row];
}
}
现在基本差不多了 你会发现你还没有引入新建立的View的类的头文件
但是仍旧是报错的呢!为什么?self.tableView是什么东西 不认识。所以还需要添加一个变量tableview,并用IBOutet修饰:
@property (nonatomic, strong) IBOutlet UITableView *tableView;
并在实现文件中同步下。
OK现在数据就这么巧妙的传过去了。