热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

storyboard怎么读

本文主要介绍关于storyboard的知识点,对【超详细的Storyboard的解析——Objective-C(IOS)】和【storyboard怎么读】有兴趣的朋友可以看下由【十年之少】投稿的技术文

本文主要介绍关于storyboard的知识点,对【超详细的Storyboard的解析——Objective-C(IOS)】和【storyboard怎么读】有兴趣的朋友可以看下由【十年之少】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的【Qt for IOS开发,Objective-C】相关技术问题。

storyboard怎么读

转自:https://www.iteye.com/blog/iaiai-1493956?(这真是我见过最详细的博客了,感觉内容量相当于书中一章的量,做好准备接受知识的洗礼吧)

(Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果,我贴上本教程所完成的Storyboard的截图:?


这就完成了,运行看看:?

?
这和我们想象的结果并不是很符合,我们修改了原型单元格的属性和高度,但是table view却没有考虑进去,有两种方法可以修复它,我们可以改变table view的行高或者加入 heightForRowAtIndexPath 方法来修改,地一种方法更简单,我们就用他。?

注意:在一下两种情况下,你应该使用 heightForRowAtIndexPath 方法:一是,你不能预先知道你的单元格的高度,二是不同的单元格会有不同的高度。?

回到MainStoryboard.storyboard,在大小检查器中将高度设置为55:?


通过这种方式的话,如果之前你是使用拖动而不是键入数值的方式改变高度的属性的话,则table view的数值也会自动改变。?

现在运行看看,好多了吧?

?

?

为原型单元格设置子类?



我们的表格视图已经相当像模像样了,但是我并不是很喜欢使用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。?

?
请注意:要把这个control连接到table view cell而不是view controller哦亲,别选错了。?

现在我们把一切都链接好了,只需要加入数据源的代码就可以了。?

-?(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"??


试着运行,你会发现其实什么都没有变化,可是我们都知道,内部已经有了变化。?

在这相同的场景下面,我们可是在使用子类呢。?

这里还有一些设计小窍门:第一点:一定要设置标签被选中时的颜色。?

?
第二点,确保你加入单元格的字符大小是可以变化的,这样,当单元格大小变化时,他的内容的大小也会跟着变化,比如说:?

在PlayersViewController.m中加入如下方法:?

?

-?(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];??
????}??
}??


这个方法加入好了之后,用手指轻扫一行单元格,会出现一个删除键,试试看?

?
Delete按钮出现在右边,遮住了一部分评级图片,怎么解决呢??

打开MainStoryBoard.storyboard,选中table view cell中的image view,在大小检查器中修改Autosizing属性,是它能够跟随上级view的边缘。?

?
为labels设置同样的属性。?

?
加入了这些变动之后,删除按钮如我们意料的出现了:?

?
其实,最好的做法是让这些星星在出现delete按钮的时候消失,不过这只是一个练习,不要太较真哦亲



?

?

本文《超详细的Storyboard的解析——Objective-C(IOS)》版权归十年之少所有,引用超详细的Storyboard的解析——Objective-C(IOS)需遵循CC 4.0 BY-SA版权协议。


推荐阅读
author-avatar
yeszio
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有