本文主要介绍关于storyboard的知识点,对【超详细的Storyboard的解析——Objective-C(IOS)】和【storyboard怎么读】有兴趣的朋友可以看下由【十年之少】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的【Qt for IOS开发,Objective-C】相关技术问题。
转自:https://www.iteye.com/blog/iaiai-1493956?(这真是我见过最详细的博客了,感觉内容量相当于书中一章的量,做好准备接受知识的洗礼吧)
(Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果,我贴上本教程所完成的Storyboard的截图:?
这就完成了,运行看看:?
?
?
为原型单元格设置子类?
我们的表格视图已经相当像模像样了,但是我并不是很喜欢使用tag来访问label,要是我们能够把这些lable连接到输出口,之后在回应属性中使用他们,该多好,而且不出所料,我们可以这样做。?
使用 Objective-C class模板新建一个文件,命名为PlayerCell,继承UITableViewCell。?
修改PlayerCell.h?
@interface?PlayerCell?:?UITableViewCell??
??
@property?(nonatomic,?strong)?IBOutlet?UILabel?*nameLabel;??
@property?(nonatomic,?strong)?IBOutlet?UILabel?*gameLabel;??
@property?(nonatomic,?strong)?IBOutlet?UIImageView??
??*ratingImageView;??
??
@end??
修改PlayerCell.m?
#import?"PlayerCell.h"??
??
@implementation?PlayerCell??
??
@synthesize?nameLabel;??
@synthesize?gameLabel;??
@synthesize?ratingImageView;??
??
@end??
这个类本身并不其很大的作用,只是为nameLabel、gameLabel和ratingImageView声明了属性。?
回到MainStoryboard.storyboard选中原型单元格,将他的class属性修改为“PlayerCell”,现在当你向table view请求dequeueReusableCellWithIdentifier,他会返回一个PlayerCell实例而不是一个普通的UITableViewCell实例。?
请注意我将这个类和reuse Indetifier的名字命名的一样,只是营卫我喜欢这样哦亲,这两个之间其实没啥关系。?
现在你可以将标签和image view连接到输出口去了,选中或者将他从链接检查器拖动到table view cell。?
-?(UITableViewCell?*)tableView:(UITableView?*)tableView?cellForRowAtIndexPath:(NSIndexPath?*)indexPath??
{??
????PlayerCell?*cell?=?(PlayerCell?*)[tableView??
?????dequeueReusableCellWithIdentifier:@"PlayerCell"];??
????Player?*player?=?[self.players?objectAtIndex:indexPath.row];??
????cell.nameLabel.text?=?player.name;??
????cell.gameLabel.text?=?player.game;??
????cell.ratingImageView.image?=?[self??
??????imageForRating:player.rating];??
????return?cell;??
}??
我们现在将接收到 dequeueReusableCellWithIdentifier 的控件指派到PlayerCell,只需要简单的使用已经链接labels和image view到设置好的属性上就可以了,这会让这个设计看上去更加好控制,更加简明。?
当然,在PlayerCell前要引入资源:?
#import?"PlayerCell.h"??
试着运行,你会发现其实什么都没有变化,可是我们都知道,内部已经有了变化。?
在这相同的场景下面,我们可是在使用子类呢。?
这里还有一些设计小窍门:第一点:一定要设置标签被选中时的颜色。?
?
-?(void)tableView:(UITableView?*)tableView?commitEditingStyle:(UITableViewCellEditingStyle)editingStyle?forRowAtIndexPath:(NSIndexPath?*)indexPath??
{??
????if?(editingStyle?==?UITableViewCellEditingStyleDelete)??
????{??
????????[self.players?removeObjectAtIndex:indexPath.row];??
????????[tableView?deleteRowsAtIndexPaths:[NSArray?arrayWithObject:indexPath]?withRowAnimation:UITableViewRowAnimationFade];??
????}??
}??
这个方法加入好了之后,用手指轻扫一行单元格,会出现一个删除键,试试看?
?
?
本文《超详细的Storyboard的解析——Objective-C(IOS)》版权归十年之少所有,引用超详细的Storyboard的解析——Objective-C(IOS)需遵循CC 4.0 BY-SA版权协议。