zoukankan      html  css  js  c++  java
  • [转]IOS开发(一):第一个有交互的APP

    声明:本博客内容来自他人,我也是跟着他的步骤经过实践后贴出来,一方面是为了自己好查阅,另一面也希望分享给更多新手们。源地址http://www.cnblogs.com/minglz/

    1、添加2个Button和1个Label

    选中project navigate中的“BIDViewController.xib”,添加Button的方法和上一篇中添加Label的方法一样,直接从Object Library里面拖就可以,在Object Library中找到“Round Rect Button” 
     

    拖2个到界面中,添加完后的效果如下 
     

    上图中,将2个button分别根据辅助线放到了屏幕的左右两边上下剧中的位置,Label放在最上面,然后将Label拉长,拉到出现辅助线的位置。 


    2、添加button文字,去除Label文字 
    在Xcode中,改变文字的方法有3种,第一种选中button,然后在Attributes Inspector中改变Title的属性值 
        
    第二种方法是直接用鼠标在button上双击,然后键入需要的文字即可(这个和VS里面有很大的不同,在VS中双击一个按钮是添加一个单击事件,而在Xcode中,则是改变button的文字,所以说是VS比较简单嘛) 

     
    第三种就是用代码改变文字。 


    分别将左右两个按钮的文字改成“Left”和“Right”,使用同样的方法,去除Label上的文字,并且在Attributes Inspector中将Label的文字对齐方式设置为剧中,最后的界面效果如下 
     

    3、Outlet和Action

    (这一小节的叙述不一定完全正确,只是本人的个人理解,如果有不对的地方,望大家能够指出,谢谢!)

    这两个概念是我学习ios开发以来遇到的第一个难点,其实说难不难,就是很搞,一开始没有理解它的意思。 

    Outlet:简单来说就是C/C++里面的指针,指向一个对象,或者说是一个对象的引用,例如一个Label,一个Button等。在C# Winform中,我们会为每一个控件设定一个name,那么在编程时,直接使用这个name就可以对该控件进行操作,但是在ios里面,情况变得有些复杂,控件没有name,就是说你拖一个控件过来,这个控件是没有自己的name的,那么要在code中操作这个控件该怎么办呢?定义一个Outlet,然后把这个Outlet指向该控件,在code中就用这个Outlet来操作这个控件,好吧,稍稍有些复杂。 

    举两个Outlet的例子: 

    @property (weak, nonatomic) IBOutlet UILabel *statusText; 

    以上仅仅是一个Outlet的定义,说明这个Outlet会指向一个Label控件,但是并没有说明指向哪一个Label。 

    @property (weak, nonatomic) IBOutlet UIButton *leftButton; 


    同样,上面仅仅是一个Outlet的定义,说明这个Outlet会指向一个Button控件,但是并没有说明指向哪一个Button。 

    Action:相对于Outlet,Action应该稍微简单一点,它的作用就是定义一个事件,然后将控件和Action事件联系起来就可以。Action的例子如下: 

    - (IBAction)buttonPressed:(id)sender; 


    这个和C# Winform有点类似,C#可以单独定义事件,然后将控件和事件使用“+=”操作符联系起来就可以,虽然ios里面没有这个语法,但是也是需要联系的,联系建立起来以后,控件就可以触发这个事件了。 

    希望以上对Outlet和Action的简单说说明大家能够看懂,其实我自己也没有百分百搞明白,先将自己的理解写下,以后有更深入的理解后再进行补充。 

    4、为Button添加事件 
    前面说过了,要添加事件,首先要创建一个Action,然后建立联系,Xcode比较智能,可以帮我们把这2步一起进行。 
    a)选中project navigator中的BIDViewController.xib,显示iphone的界面。 
    b)选中Xcode右上角的7个按钮从左到右的第二个Show Assistant editor(快捷键:option+command+enter,菜单栏View>Assistant Editor>Show Assistant editor) 
     

    选中后的界面如下,会在iphone界面的右边出现BIDViewController.h文件,我们等会就要将button拖到这个文件里,然后进行一些相应的设置,Xcode就会自动帮我们建立控件和Action之间的联系。

    接下来就是创建Action了,鼠标选中Left按钮不放,按住键盘上的control键,然后鼠标移动到右边的BIDViewController.h文件上,在@interface和@end中间放开鼠标 

     
    会有一个框弹出来,如下 

     

    将上面的值设置成下面的内容 

     

    首先,我们是创建一个Action,所以Connection选择Action,然后为事件命名为buttonPressed,类型为UIButton,说明是按钮事件,最后单击“Connect”按钮,完成创建。创建完成后的代码如下:(BIDViewController.h) 

    #import <UIKit/UIKit.h> 
    
    @interface BIDViewController : UIViewController 
    - (IBAction)buttonPressed:(id)sender; 
    
    @end

      
    在BIDViewController.m中会自动添加该事件的方法 

    - (IBAction)buttonPressed:(id)sender { 
    } 


    为Left按钮添加好Action后,再为Right按钮添加同样的事件,buttonPressed的参数sender可以区分是由哪个button触发了该事件,所以我们不必再为Right button单独的创建一个事件,直接将Right button关联到buttonPressed就可以了,关联的方法也很简单,鼠标选中Right按钮不放,按住键盘上的control键,然后鼠标移动到右边的BIDViewController.h文件的buttonPressed事件上面,然后放开鼠标,关联完成。 
     

    5、为Label添加Outlet 
    添加Outlet的方法和添加Action的方法一样,只是在弹出框的参数选择上略有区别,同样,鼠标选中Label标签,按住control,拖到BIDViewController.h文件中,放开鼠标后,一个弹出框弹出来 
     

    Connection保留默认值Outlet,Name中填写“textStatus”作为Outlet的名称,其他的选项都保留默认值即可,最后点击“Connect”按钮,Outlet创建完成。 
    创建完成后的代码如下:(BIDViewController.h) 

    @property (weak, nonatomic) IBOutlet UILabel *textStatus; 


    在BIDViewController.m中会自动添加@synthesize,然后在viewDidUnload方法中添加对textStatus的释放代码。(viewDidUnload方法是系统自动创建的,当该View释放时调用,即该View将不显示了,其他View要显示时,该方法会调用到。) 

    @synthesize textStatus; 
    ... 
    ... 
    - (void)viewDidUnload 
    { 
        [self setTextStatus:nil]; 
        [super viewDidUnload]; 
        // Release any retained subviews of the main view. 
        // e.g. self.myOutlet = nil; 
    } 
    


    至此,所有的Action和Outlet都已经添加完毕,button可以触发buttonPressed事件,textStatus指向Label,可以对Label进行操作。 


    6、写Code 
    终于要开始写代码的,真心不容易啊。在BIDViewController.m的buttonPressed方法中添加以下代码(其实也就2行而已) 

    - (IBAction)buttonPressed:(id)sender { 
        NSString *title = [sender titleForState:UIControlStateNormal]; 
        textStatus.text = [NSString stringWithFormat:@"%@ button pressed.", title]; 
    } 


    第一行:titleForState指的是按钮在某个状态时显示的title,UIControlStateNormal得到的是按钮的一般状态,即按钮没有被点击,没有获取焦点时的状态,那么titleForState:UIControlStateNormal获得的是按钮在通常状态下的title。 
    第二行:将title赋值给Label用于显示。 
    两行代码很简单易懂,没有什么难点。 

    7、编译运行 
    快捷键command+B,编译程序。 
    快捷键command+R,运行程序。 
    当然,你也可以直接点Run按钮,直接编译运行程序。 

    程序运行后的开始效果如下 

     

    点击Left按钮,Label显示“Left button pressed.”,点击Right按钮,Label显示“Right button pressed.” 

    至此,整个程序开发完毕!
    ------------------------------------------------------------------------------------------------

    补充:

    1、IBOutlet和IBAction

    IBOutlet输出口是使用关键字IBOutlet声明的实例变量。控制器头文件中的输出口声明应如下所示:

    @property (nonatomic, retain) IBOutlet UIButton *myButton;

    IBOutlet关键字的定义如下所示:

    #ifndef IBOutlet
    #define IBOutlet
    #endif

    就编译器而言,IBOutlet并未执行任何操作。它的唯一作用是告诉Interface Builder,此实例变量将被连接到nib中的对象。你创建的任何需要连接到nib文件中的对象的实例变量都必须以IBOutlet关键字开头。打开Interface Builder时,它会在项目头文件中扫描此关键字,你可以根据这些(且只能根据这些)变量将代码连接到nib。

    IBAction操作是控制器类中的方法。它们也是通过特殊关键字IBAction声明的,该关键字告诉Interface Builder,此方法是一个操作,且可以被某个控件触发。通常,操作方法的声明应如下所示:

    - (IBAction)doSomething:(id)sender

    IBAction关键字的定义如下所示:

    #ifndef IBAction
    #define IBAction void
    #endif
  • 相关阅读:
    swiper插件的使用demo
    可能要用的东西
    VIDEO
    vue上传图片加水印
    图片 base64 file blob 之间相互的转化
    vant 上传图片加水印
    JS 随机排序算法
    ubuntu16.04 下apache 搭建站点
    Unity常用目录对应的Android && iOS平台地址
    IOS 官方实现单例模式
  • 原文地址:https://www.cnblogs.com/xsjayz/p/3012588.html
Copyright © 2011-2022 走看看