一、按钮的状态
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、运行结果
界面:
输出:
总结
以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。