一、按钮的状态
1.uicontrolstatenormal
1> 除开uicontrolstatehighlighted
、uicontrolstatedisabled
、uicontrolstateselected
以外的其他情况,都是normal状态
2> 这种状态下的按钮【可以】接收点击事件
2.uicontrolstatehighlighted
1> 【当按住按钮不松开】或者【highlighted = yes
】时就能达到这种状态
2> 这种状态下的按钮【可以】接收点击事件
3.uicontrolstatedisabled
1> 【button.enabled = no
】时就能达到这种状态
2> 这种状态下的按钮【无法】接收点击事件
4.uicontrolstateselected
1> 【button.selected = yes
】时就能达到这种状态
2> 这种状态下的按钮【可以】接收点击事件
二、让按钮无法点击的2种方法
1> button.enabled = no;
*【会】进入uicontrolstatedisabled状态
2> button.userinteractionenabled = no;
*【不会】进入uicontrolstatedisabled状态,继续保持当前状态
三、ios中按钮点击事件处理方式
在ios开发中,时常会用到按钮,通过按钮的点击来完成界面的跳转等功能。按钮事件的实现方式有多种,其中
较为常用的是目标-动作对模式。但这种方式使得view与controller之间的耦合程度较高,不推荐使用;
另一种方式是代理方式,按钮的事件在view中绑定,controller作为view的代理实现代理方法。
目标-动作对实现方式
具体来说,假设我们有一个包含一个button的veiw,view将button放在头文件中,以便外部访问。然后controller将view作为自己的view,在viewcontroller中实现按钮的点击事件。
文字描述起来好像不够直观,直接上代码
1、myview.h
包含一个可被外部访问的按钮的view
1
2
3
4
5
|
@interface myview : uiview @property (strong, nonatomic) uibutton *mybtn; @end |
2、myview.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#import "myview.h" @implementation myview //view的初始化方法 - (id)initwithframe:(cgrect)frame { self = [super initwithframe:frame]; if (self) { //初始化按钮 _mybtn = [[uibutton alloc] initwithframe:cgrectmake(140, 100, 100, 50)]; _mybtn.backgroundcolor = [uicolor redcolor]; //将按钮添加到自身 [self addsubview:_mybtn]; } return self; } @end |
3、myviewcontroller.h
1
2
3
4
5
|
#import <uikit/uikit.h> @interface myviewcontroller : uiviewcontroller @end |
4、myviewcontroller.m
添加myview作为自身view
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#import "myviewcontroller.h" #import "myview.h" @interface myviewcontroller () @property (strong, nonatomic) myview *myview; @end @implementation myviewcontroller - ( void )loadview { myview *myview = [[myview alloc] initwithframe: [[uiscreen mainscreen] bounds] ]; self.view = myview; self.myview = myview; //在controller中设置按钮的目标-动作,其中目标是self,也就是控制器自身,动作是用目标提供的btnclick:方法, [self.myview.mybtn addtarget:self action:@selector(btnclick:) forcontrolevents:uicontroleventtouchupinside]; } //myview中的按钮的事件 - ( void )btnclick:(uibutton *)btn { nslog(@ "method in controller." ); nslog(@ "button clicked." ); } |
5、 appdelegate.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#import "appdelegate.h" #import "myviewcontroller.h" @interface appdelegate () @end @implementation appdelegate - ( bool )application:(uiapplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions { self.window = [ [uiwindow alloc] initwithframe: [[uiscreen mainscreen] bounds ] ]; myviewcontroller *myvc = [[myviewcontroller alloc] init]; self.window.rootviewcontroller = myvc; self.window.backgroundcolor = [uicolor whitecolor]; [self.window makekeyandvisible]; return yes; } |
6、运行结果
界面:
输出:
总结
以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。