关闭

用storyboard开发IOS页面的一点体会

标签: iosstoryboard
1041人阅读 评论(0) 收藏 举报
分类:

刚接触IOS开发不到10天,只写了一些后台的逻辑代码,对Objective-C和cocoa touch的API有点感觉了。不过今天开始尝试用storyboard开发UI,还是不太习惯,本文简单记录一下

总的理解

ios中一个页面称为一个scene,一般就对应一个ViewController,或者一个XIB文件。而storyboard则是把应用中的scene都串联起来。一个ViewController下面一般只会有一个view的层次结构,构成了应用的UI

自动创建View

我不知道以前开发ios是怎么做的,可能也需要写代码来初始化ViewController吧。不过今天用storyboard来开发,似乎不需要,storyboard会隐式地创建和初始化配置的ViewController,以及ViewController下面挂的所有View组件

所以一般不需要写这样的代码:

- (void)viewDidLoad    
{    
    [super viewDidLoad];    
    self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];    
    NSURLRequest *request =[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];    
    [self.view addSubview: self.webView];    
    [self.webView loadRequest:request];    
}

总的来说,UI的开发可以在storyboard里通过图形化界面来完成。不过在需要的时候,也可以编码来实现,不过UI的API我还不太熟

获取View的引用

虽然storyboard自动创建了View组件,但是代码里还是需要拿到它们的引用才可以。在android里经常可以看到这样的代码:

mobileNumberLayout = (LinearLayout) findViewById(R.id.mobileNumberLayout);
sendValidateCodeTv = (TextView) findViewById(R.id.sendValidateCode);

主要就是findViewById这个API,在ios开发里不需要这样调用,View在Controller里的引用有个术语称为IBOutlet,只要在storyboard里拉线,就可以直接引用了:

// 刷新进度条和文本
- (void) refreshProgressTo: (float)stage WithContent:(NSString*)content
{
    [self.loadingLabel setText:content];
    [self.progress setProgress:stage animated: YES];
}

这点我觉得还是挺方便的,要善用storyboard里的connections inspector面板,里面会显示有哪些Outlet,Action,Segue等,很方便

用Action响应UI事件

最后是怎么响应UI事件,比如按钮按下,文本框内容变化等……

在android里比较类似html里的写法,有onclick之类的。在ios里也差不多,主要是target-action模型。View Controller称为target,然后可以设置各种Action。而View会发出Event,可以配置Event会触发target上的哪个Action

Action的函数必须是这种格式:

-(IBAction) doSomething:(id*) sender
{
    NSLog(@"hahaha",nil);
}

然后在storyboard里就会识别出这是个Action,可以通过拉线跟View的Event关联起来

如果不用storyboard的话,也一样是这个模式,只不过需要自己写代码注册Action和Event的关联关系,方法是在UIControl中定义的:

-(void)addTarget:(id)target action:(SEL) forControlEvents:(UIControlEvents)controlEvents

举例:

[self.btnCooking addTarget:self action:@selector(pressCooking:) forControlEvents:UIControlEventTouchUpInside];

上面这段代码,当btnCooking发出TouchUpInside事件时,就会调用Controller上的pressCooking函数(@selector在OC中就是方法的意思)

感想

既然能拿到View的引用,又能设置Action,那基本就什么都能做了。有些功能用storyboard来实现还是不错的,特别是auto layout似乎挺多人都说挺好。不过也要熟悉ios UI相关的API,在必要的时候才能编码来实现

PS:

下面是一个给UIView设置背景图片的代码,挺好用的:

self.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"welcome.jpg"]];


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:763047次
    • 积分:14067
    • 等级:
    • 排名:第905名
    • 原创:651篇
    • 转载:18篇
    • 译文:0篇
    • 评论:130条
    最新评论