ios xib autolayout页面为什么离开当前xib页面之后,然后再打开xib页面,页面整体往上面移动了呢?

收藏,373 浏览
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
现在我用xib来呈现我想要现实的界面,但是,我想要展示的界面超出当前xib的显示界面,请问一下,怎样才能显示更多的界面,(PS:这里不是scrollView和tableView没有复用)
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
6月4日 回答
感谢上面两位的回答,不过你们的方法似乎都不奏效。(ps:也可能是我的问题表述不清楚) 我的解决方法是,选中xib中的view然后在右侧选择show the attributes inspector中的Simulated Metrics属性中的Size选择为freedom,然后可以随意拖动nib中view的大小,然后在代码中添加- (void)viewWillAppear:(BOOL)animated中通过设置scrollView中contentSize就可以达到我要的效果了
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
6月3日 回答
我可能没有理解题主的问题
view有一个clipsToBounds属性 默认为NO 所有超出的xib的view可以直接显示 只管放上去就可以
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
6月4日 回答
你的意思是超出xib的范围,自己编辑的时候看不见这个view了是吗?
把它位置挪到可见范围,编辑好了再挪出去吧……反正我一直是这样做的&&
同步到新浪微博
分享到微博?
不要错过该问题的后续解决方案
如果你没找到答案,记得登录关注哦,大家会尽全力帮你解决的 ^___^
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
举报理由:
推广(招聘、广告、SEO 等)方面的内容
带有人身攻击、辱骂、仇恨等违反条款的内容
与已有问题重复(请编辑该提问指向已有相同问题)
内容质量差,或不适合在本网站出现
答非所问,不符合答题要求
其他原因(请补充说明)
补充说明:
扫扫下载 AppiPhone开发学习笔记001――Xib界面上的控件与代码的相互关联方法
(注:环境Mac OS X Lion 10.7.3 + Xcode 4.2.1 + iOS SDK 5.0.)
比如工程中添加了一个UIViewController的sub class,新建的时候选中&With XIB for user interface&,则新建完成会同时生成三个文件:xxx.h, xxx.m, xxx.xib(前期也可是*.nib,xib和nib都指UI源文件,后来苹果统一用xib后缀名了)。
xxx.h默认内容:
#import &UIKit/UIKit.h&
@interface xxx : UIViewController
xxx.m默认内容:
除了工程自动添加的接口,其它的任何内容都没有。
*.xib默认有一个view,这个就是UIViewController的默认view,也是其它的任何子view都没有添加.& 此时从Xcode的Object Library中拖两个控件到该view:一个label,一个button.
最后如下图:
&此后在xxx.h中也添加一个UILabel和一个UIButton,并且做为属性。此时会发现Xcode自动在属性的定义旁边生成了两个用于连接的小圆标志,如下图:
可以看到上面对应的成员变量注释掉了,其实在以前的老版本上面是必须要写上的,表示对应的@property和@synthesize生成的属性访问器getter setter方法操作的是这两个成员变量。后期的版本成员变量可以不用再这样写了。即:
(1)以前的版本:
@interface xxx :UIViewController {
&&& UILabel *
&&& UIButton *
@property (nonatomic,retain)IBOutletUILabel *
@property (nonatomic,retain)IBOutletUIButton *
*.m源文件:
@implementation xxx
(2)Xcode 4.2的版本:
@interface xxx : UIViewController {
//&&& UILabel *
//&&& UIButton *
@property (nonatomic,retain)IBOutlet UILabel *
@property (nonatomic,retain)IBOutlet UIButton *
*.m源文件:
@implementation xxx
@synthesize label = _
@synthesize button = _
后来的版本表示属性访问方法默认操作的是_lable和_button成员变量。头文件中省写了,当然*.m中也还是可以像以前那样写,不用在后面添加=_label和=_button也没有任何问题,应该是编译器默认作处理了。细节没多追究。
现在源代码中有label和button,对应的xib文件中也有label和button,现在想把它们对应联系起来,毕竟很多时候一些动态的效果是需要代码来实现的。现在介绍方法:
方法:&拖拽&
&注意右上脚Editor位置,将视图打到assistant editor,使显示方式变成上面左边是xxx.xib,右边是xxx.h,此时点中右侧label property声明左侧的小圆,按住并移向左侧xib视图区域的Label控件上面。Xcode产生连线,此时松开即完成界面上label和代码中label属性的连接,button同理。连完后相应的小圆变成实心。鼠标移到上面,会变成+号,并且左侧xib界面上会显示已经和界面上哪个控件建立了连接。
这就是所谓的拖拽方法,然后就可以在*.m文件里面随意控制该控件的显示样式了,包括背景颜色、背景图像,圆角,字体大小,所显示的文本等等。
最近在网上偶然看到一位大牛的博文,对Xcode4中xib的绑定原理又有了新的理解,下面摘录原文叙述如下:
1. 第一步:设置xib文件的File's Owner的class属性:
在xib文件中有一个最重要的就是File's Owner,这个对象指的就是Class属性中设定的那个类的对象。只有设定了Class属性中的类才有办法进行xib界面上的控件与IBOutlet与IBAction的绑定关联。也就是说要先检查xib文件中的File's Owner的属性Class是否设置正确,然后再去设置对应的Outlet与Action。即设置了File's Owner对应的实体类之后Xcode就知道这个实体类有哪些IBOutet与IBAction,这样在拖动进行连接的时候就会显示实体类的头文件中定义好的IBOulet与IBAction。
2. 第二步:在上面指定的所属类头文件中,声明IBOutlet与IBAction:
在头文件中声明IBOutlet与IBAction这两个作用就是让编译器知道这些属性与事件调用是公共给界面调用的。IBOutet就是把界面(xib)中的对象读取到实现类中,这样就可以在实现类中对这些界面控件进行属性的设置,从而改为界面的展示。
3. 第三步:在xib编辑器中(IB)进行关联绑定(选中xib的File's Owner,Utilities窗口切换到connections inspector选项卡)
将connections inspector选项卡下的Outlets(如果在指定所属类的头文件中声明有IBOutlet),和Received Actions(如果有指定所属类的头文件中声明有IBAction)与中间窗口中的Objects下的控件相拖拽连接。
具体即通过左键拖动关联界面控件与实现类的IBOulet或IBAction即可完成界面编辑与绑定的操作。
放两张图:
Received Actions:
在此再次感谢这位大牛的博客!
摘自 Code Heaven
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。◇本站云标签
◇热点推荐iOS单独创建xib详解
需求场景:有时我们创建一个类后,过后需要为它单独的创建一个 Xib文件,或者有时我们两个类页面类似,xib复制即可
1.选择NewFile ,选择User InterFace,选中Empty文件
2.创建后&拉进去一个view控件进去
3.点击Filer Ower 按住control 关联这个View
4.进入入口类中,这里创建viewcontoller对象需要注意的不能直接用init进行初始化,因为此处当你创建的xib文件名和viewcontoller名字一样时候,可以直接用init进行初始化,此处名字不一样,需要用initWithNibName进行初始化
&ViewController
*vc = [[ViewController
alloc]initWithNibName:@"Empty" bundle:nil];
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。当前访客身份:游客 [
少年不识愁滋味,为赋新词强说愁。 而今识尽愁滋味,却道天凉好个秋。
:引用来自“双子座”的评论 引用来自“西昆仑”的...
:引用来自“forloveyou”的评论 我在搭建3.7环境时...
:免费提供App网页自动下载安装所需https服务器!微...
:引用来自“willingseal”的评论 引用来自“湛蓝的...
:引用来自“mhm426”的评论点击一行后,同时标记了...
:楼主干的漂亮~~
:When the window of contain GtkEntry type is p...
:frame怎么把图像放进去?
:引用来自“Eason-cyx”的评论第四步的连线为什么...
今日访问:186
昨日访问:423
本周访问:1385
本月访问:4151
所有访问:404843
iOS开发19:Storyboard的简单使用
发表于3年前( 21:00)&&
阅读(39944)&|&评论()
0人收藏此文章,
之前做的例子,我们经常会用到.xib文件,在其中我们可以进行界面的设计。不过如果想切换视图,我们就得自己写很多代码。自从苹果推出了Storyboard,我们可以在一个编辑区域设计多个视图,并通过可视化的方法进行各个视图之间的切换。如下图:
上图中有两种箭头:左边的箭头表示程序刚开始运行时加载的控制器;右边的称为Segue,这个表示视图之间的切换,或者表示连接Navigation Controller的Root View Controller。
Storyboard功能强大,通过它不仅可以单独设计每一个视图,还能很简单地实现各个视图之间的切换。
接下来的例子主要显示Storyboard的功能,顺便用Storyboard实现了静态表格等功能。为了显示Storyboard的功能,我们从Empty Application开始我们的例子。
1、运行Xcode 4.2,新建一个Empty Application,名称为Storyboard Test:
2、打开AppDelegate.m,找到didFinishLaunchingWithOptions方法,删除其中代码,使得只有return YES;语句。
3、创建一个Storyboard:
在菜单栏依次选择File — New — New File,在弹出的窗口,左边选择iOS组中的User Interface,右边选择Storyboard:
之后单击Next,选择Device Family为iPhone,单击Next,输入名称MainStoryboard,并设好Group:
单击Create,这样就创建了一个Storyboard。
4、配置程序,使得从MainStoryboard启动:
先单击左边带蓝色图标的Storyboard Test,然后选择Summary,接下来在Main Storyboard中选择MainStoryboard:
这样,当运行程序时,就从MainStoryboard加载内容了。
5、单击MainStoryboard.storyboard,会发现编辑区域是空的。拖一个Navigation Controller到编辑区域:
6、选中右边的View Controller,然后按Delete键删除它。之后拖一个Table View Controller到编辑区域:
7、我们将在这个Table View Controller中创建静态表格,不过先要将其设置为左边Navigation Controller的Root Controller:
选中Navigation Controller,按住Control键,向Table View Controller拉线:
松开鼠标后,在弹出菜单选择Relationship - rootViewController:
之后,两个框之间会出现一个连接线,这个就可以称作是Segue。
8、选中Table View Controller中的Table View,之后打开Attribute Inspector,设置其Content属性为Static Cells:
这样你会发现Table View中出现了三行Cell。在上图你可以设置很多熟悉,比如Style、Section数量等。
9、设置行数:
选中Table View Section,在Attribute Inspector中设置其行数为2:
然后选中每一行,设置其Style为Basic:
设置第一行中Label的值为:Date and Time,第二行中的Label为List;之后选中下方的Navigation Item,在Attribute Inspector设置Title为Root View,Back Button为Root:
10、我们实现单击表格中的Date and Time这一行实现页面转换,在新页面显示切换时的时间。
在菜单栏依次选择File — New — New File,在弹出的窗口左边选择iOS中的Cocoa Touch,右边选择UIViewController subclass:
单击Next,输入名称DateAndTimeViewController,但是不要选XIB:
之后,选好位置和Group,完成创建。
11、再次打开MainStoryboard.storyboard,拖一个View Controller到编辑区域,然后选中这个View Controller,打开Identity Inspector,设置class属性为DateAndTimeViewController:
这样,我们就可以向DateAndTimeViewController创建映射了。
12、向新拖入的View Controller添加控件,如下图:
然后将显示为Label的两个标签向DateAndTimeViewController.h中创建映射,名称分别是dateLabel、timeLabel:
13、打开DateAndTimeViewController.m,在ViewDidUnload方法之后添加代码:
//每次切换到这个试图,显示切换时的日期和时间
- (void)viewWillAppear:(BOOL)animated {
NSDate *now = [NSDate date];
dateLabel.text = [NSDateFormatter
localizedStringFromDate:now
dateStyle:NSDateFormatterLongStyle
timeStyle:NSDateFormatterNoStyle];
timeLabel.text = [NSDateFormatter
localizedStringFromDate:now
dateStyle:NSDateFormatterNoStyle
timeStyle:NSDateFormatterLongStyle];
14、打开MainStoryboard.storyboard,选中表格的行Date and Time,按住Contrl,向View Controller拉线:
在弹出的菜单选择Push:
这样,Root View Controller与DateAndTimeViewController之间就出现了箭头,运行时当点击表格中的那一行,视图就会切换到DateAndTimeViewController。
15、选中DateAndTimeViewController中的Navigation Item,在Attribute Inspector中设置其Title为Date and Time:
16、运行一下,首先程序将加载静态表格,表格中有两行:Date and Time以及List,单击Date and Time,视图切换到相应视图,单击左上角的Root按钮,视图回到Root View。每次进入Date and Time视图,显示的时间都会不同:
17、接下来,我们将要实现,单击List行,显示一个表格,并且单击表格中的某一行,我们可以在新弹出的视图中编辑该行内容。首先创建ViewController文件:ListViewController、ListEditViewController,前者继承UITableViewController,后者继承UIViewController,参照第10步。都不要创建XIB文件。
然后打开MainStoryboard.storyboard,拖一个Table View Controller和View Controller到编辑区域,调整所有视图在编辑区域的位置,如下图:
设置新拖入的Table View Controller和View Controller的class属性分别是ListViewController和ListEditViewController,参考第11步。
18、参照第14步,从Root View Controller中的List那一行向List View Controller拉线,并在弹出菜单也选择Push。然后选中List View Controller的Navigation Item,设置Title及Back Button都为List,可以参照第9步。
19、向List View Controller中的表格区域拖入一个Table View Cell,这样其中就有两个Cell了。设置第一个Cell的Identifier属性为GreenIdentifier。向第一个Cell中拖入一个Label,设置其字体颜色为绿色。同样对第二个Cell进行设置,Identifier属性为RedIdentifier,往其中拖入Label,设置字体颜色为红色。两个Label的Tag属性都设为1。
20、打开ListViewController.m,向其中添加代码:
20.1 在#import的下一行添加代码:
@interface ListViewController ()
@property (strong, nonatomic) NSMutableArray *listA
@property (copy, nonatomic) NSDictionary *editedS
20.2 在@implementation之后添加代码:
@synthesize listA
@synthesize editedS
20.3 找到viewDidLoad方法,向其中添加代码:
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:
@&Horse&, @&Sheep&, @&Pig&, @&Dog&,
@&Cat&, @&Chicken&, @&Duck&, @&Goose&,
@&Tree&, @&Flower&, @&Grass&, @&Fence&,
@&House&, @&Table&, @&Chair&, @&Book&,
@&Swing& ,nil];
self.listArray =
20.4 找到numberOfSectionsInTableView方法,使其返回1,并删掉#warning。
20.5 找到numberOfRowsInSection方法,删掉#warning,使其返回[listArray count]:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
// Return the number of rows in the section.
return [listArray count];
20.6 找到cellForRowAtIndexPath方法,修改其中代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
NSUInteger row = [indexPath row];
NSString *identifier =
if (row%2 == 0) {
identifier = @&GreenIdentifier&;
identifier = @&RedIdentifier&;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
UILabel *cellLabel = (UILabel *)[cell viewWithTag:1];
cellLabel.text = [listArray objectAtIndex:row];
21、运行一下,当单击List行时,页面切换到我们List视图:
22、下面实现单击List表格中的某一行,视图切换,并且视图中的内容与之前选中的行相关,然后可以对其进行编辑,返回后,原来的数据也会发生改变。
打开MainStoryboard.storyboard,仿照第14步,从List View Controller中的两行向List Edit View Controller拉线,在弹出菜单选择Push。这样List Edit View Controller视图中就出现了Navigation Item,选中它,设置Title为Edit。这样,单击List表格中的某一行,视图都会切换到List Edit View Controller。
23、打开ListViewController.m,在@end之前添加代码:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
//获取目的ViewController
UIViewController *destination = [segue destinationViewController];
if ([destination respondsToSelector:@selector(setPreViewController:)]) {
//将自身传递给目的ViewController
[destination setValue:self forKey:@&preViewController&];
if ([destination respondsToSelector:@selector(setSelection:)]) {
//目的ViewController中的selection属性存储的就是需要编辑的内容及其在表格中的位置
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
id object = [self.listArray objectAtIndex:indexPath.row];
NSDictionary *selection = [NSDictionary dictionaryWithObjectsAndKeys:
indexPath, @&indexPath&,
object, @&object&,
[destination setValue:selection forKey:@&selection&];
在ViewDidUnload方法之后添加代码:
- (void)setEditedSelection:(NSDictionary *)dict {
if (![dict isEqual:editedSelection]) {
editedSelection =
NSIndexPath *indexPath = [dict objectForKey:@&indexPath&];
id newValue = [dict objectForKey:@&object&];
[listArray replaceObjectAtIndex:indexPath.row withObject:newValue];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
24、打开MainStoryboard.storyboard,找到Edit视图,向其中拖一个Text Field:
然后为这个Text Field向ListEditViewController.h中创建Outlet映射,名称为editText。
25、打开ListEditViewController.h,向其中添加属性:
@property (copy, nonatomic) NSDictionary *
@property (weak, nonatomic) id preViewC
26、打开ListEditViewController.m,添加代码:
26.1 在@implementation的下一行添加代码:
@synthesize preViewC
26.2 找到ViewDidLoad方法,它默认是被注释掉的,去掉其周围注释符,添加代码如下:
- (void)viewDidLoad
[super viewDidLoad];
editText.text = [selection objectForKey:@&object&];
[editText becomeFirstResponder];
26.3 在ViewDidUnload方法之后添加代码:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if ([preViewController respondsToSelector:@selector(setEditedSelection:)]) {
//结束编辑
[editText endEditing:YES];
NSIndexPath *indexPath = [selection objectForKey:@&indexPath&];
id object = editText.
NSDictionary *editedSelection = [NSDictionary dictionaryWithObjectsAndKeys:
indexPath, @&indexPath&,
object, @&object&,
//设置上一个ViewController中的editedSelection,由于设置editedSelection方法
//已经重写,从而对应在表格中的数据会发生变化
[preViewController setValue:editedSelection forKey:@&editedSelection&];
27、运行:
单击List行时,视图切换到上面右图所示。然后单击Pig那一行,视图切换到Edit视图,然后编辑内容,之后返回,这样,原来表格中的内容就会发生改变:
最终代码:
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读

我要回帖

更多关于 ios xib tableview 的文章

 

随机推荐