国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - iOS自定義UIBarButtonItem的target和action示例代碼

iOS自定義UIBarButtonItem的target和action示例代碼

2021-05-20 17:09平原河流 IOS

這篇文章主要給大家介紹了關于iOS自定義UIBarButtonItem的target和action的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

需求描述:

在項目開發過程中,遇到一種情況,需要自定義uibarbuttonitem,來實現分享樣式,并在ipad中彈出系統分享框(uiactivityviewcontroller),系統分享框需要指定顯示位置(barbuttonitem)。而自定義的uibarbuttonitem target指向的是uibutton。這與需求不符,需自定義uibarbuttonitem。

在介紹自定義uibarbuttonitem前,先介紹一下相關控件的子父類關系(也可以說繼承關系)。

1、uibaritem

?
1
ns_class_available_ios(2_0) @interface uibaritem : nsobject <nscoding, uiappearance>

2、uibarbuttonitem

?
1
ns_class_available_ios(2_0) @interface uibarbuttonitem : uibaritem <nscoding>

3、uitabbaritem

?
1
ns_class_available_ios(2_0) @interface uitabbaritem : uibaritem

下面是在界面上的顯示效果

iOS自定義UIBarButtonItem的target和action示例代碼

uibarbuttonitem和uitabbaritem效果顯示

從上圖中看到uibarbuttonitem有三種效果顯示,分別是

1、導航左側返回按鈕,uinavigationitem中的backbarbuttonitem屬性

?
1
@property(nullable,nonatomic,strong) uibarbuttonitem *backbarbuttonitem

2、純文本的uibarbuttonitem

?
1
- (instancetype)initwithtitle:(nullable nsstring *)title style:(uibarbuttonitemstyle)style target:(nullable id)target action:(nullable sel)action;

3、純圖片的uibarbuttonitem,其中包括自定義圖片和系統樣式

?
1
- (instancetype)initwithimage:(nullable uiimage *)image style:(uibarbuttonitemstyle)style target:(nullable id)target action:(nullable sel)action;
?
1
- (instancetype)initwithbarbuttonsystemitem:(uibarbuttonsystemitem)systemitem target:(nullable id)target action:(nullable sel)action;

uitoolbar使用uibarbuttonitem與導航效果一致。

關于uitabbaritem在這里就不多介紹,只是拿其顯示效果與uibarbuttonitem對比。

在開發過程中,我們會使用到自定義uibarbuttonitem,來顯示我們想要的界面效果。使用的方法常為:

?
1
- (instancetype)initwithcustomview:(uiview *)customview;
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- (void)viewdidload {
 [super viewdidload];
 //自定義view
 uiview *view = [[uiview alloc] initwithframe:cgrectmake(0.0, 0.0, 60.0, 40.0)];
 view.backgroundcolor = [uicolor redcolor];
 //自定義按鈕
 uibutton *btn = [uibutton buttonwithtype:uibuttontypecustom];
 btn.frame = view.bounds;
 [btn addtarget:self action:@selector(clickright:) forcontrolevents:uicontroleventtouchupinside];
 [view addsubview:btn];
 //自定義item
 uibarbuttonitem *baritem = [[uibarbuttonitem alloc] initwithcustomview:view];
 //
 self.navigationitem.leftbarbuttonitem = baritem;
}
 
#pragma mark -
 
- (void)clickright:(id)sender {
 nslog(@"sender:%@",sender);
}

其中打印sender,其類型是uibutton。

2017-10-17 16:08:43.917 testimage[5482:163865] sender:<uibutton: 0x7fb9bad12e60; frame = (0 0; 60 40); opaque = no; layer = <calayer: 0x61000003b940>>

通過上面描述,發現系統方法不能實現項目需求效果。當然也可以通過屬性保存uibarbuttonitem方法來實現需求效果。即在點擊按鈕響應后,直接使用保存的uibarbuttonitem,但是我沒有采用這種方法。

下面是我給出的兩種解決方案:

方案一

繼承uibarbuttonitem,實現子類。

定義子類

?
1
2
3
4
5
6
#import <uikit/uikit.h>
 
@interface llbarbuttonitem : uibarbuttonitem
 
 
@end
?
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
#import "llbarbuttonitem.h"
 
@implementation llbarbuttonitem
 
- (id)initwithcustomview:(uiview *)customview {
 self = [super initwithcustomview:customview];
 if (self) {
 uibutton *btn = [uibutton buttonwithtype:uibuttontypecustom];
 btn.frame = customview.bounds;
 btn.backgroundcolor = [uicolor clearcolor];
 [btn addtarget:self action:@selector(clickbutton:) forcontrolevents:uicontroleventtouchupinside];
 [customview addsubview:btn];
 }
 return self;
}
 
- (void)clickbutton:(uibutton *)sender {
 if (self.target && [self.target respondstoselector:self.action]) {
 //[self.target performselector:self.action withobject:self];
 imp imp = [self.target methodforselector:self.action];
 
 void (*func)(id, sel, id) = (void *)imp;
 
 func(self.target, self.action, self);
 }
}
 
@end

定義子類對象,調用子類對象

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- (void)viewdidload {
 [super viewdidload];
 //自定義view
 uiview *view = [[uiview alloc] initwithframe:cgrectmake(0.0, 0.0, 60.0, 40.0)];
 view.backgroundcolor = [uicolor clearcolor];
 //自定義item
 llbarbuttonitem *baritem = [[llbarbuttonitem alloc] initwithcustomview:view];
 baritem.target = self;
 baritem.action = @selector(clickright:);
 //
 self.navigationitem.leftbarbuttonitem = baritem;
}
 
#pragma mark -
 
- (void)clickright:(id)sender {
 nslog(@"sender:%@",sender);
}

打印target對象

2017-10-17 16:24:11.696 testimage[5557:170144] sender:<llbarbuttonitem: 0x7fb403c16080>

方案二

uibarbuttonitem類別

定義類別

?
1
2
3
4
5
6
7
#import <uikit/uikit.h>
 
@interface uibarbuttonitem (custom)
 
- (void)addcutomtarget:(id)target action:(sel)action;
 
@end
?
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 "uibarbuttonitem+custom.h"
 
@implementation uibarbuttonitem (custom)
 
- (void)addcutomtarget:(id)target action:(sel)action {
 if (self.customview != nil) {
 self.target = target;
 self.action = action;
 //
 uibutton *btn = [uibutton buttonwithtype:uibuttontypecustom];
 btn.frame = self.customview.bounds;
 btn.backgroundcolor = [uicolor clearcolor];
 [btn addtarget:self action:@selector(clickbutton:) forcontrolevents:uicontroleventtouchupinside];
 [self.customview addsubview:btn];
 }
}
 
- (void)clickbutton:(uibutton *)sender {
 if (self.target && [self.target respondstoselector:self.action]) {
 //[self.target performselector:self.action withobject:self];
 imp imp = [self.target methodforselector:self.action];
 
 void (*func)(id, sel, id) = (void *)imp;
 
 func(self.target, self.action, self);
 }
}
 
@end

調用類別方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- (void)viewdidload {
 [super viewdidload];
 //自定義view
 uiview *view = [[uiview alloc] initwithframe:cgrectmake(0.0, 0.0, 60.0, 40.0)];
 view.backgroundcolor = [uicolor clearcolor];
 //自定義item
 uibarbuttonitem *baritem = [[uibarbuttonitem alloc] initwithcustomview:view];
 [baritem addcutomtarget:self action:@selector(clickright:)];
 //
 self.navigationitem.leftbarbuttonitem = baritem;
}
 
#pragma mark -
 
- (void)clickright:(id)sender {
 nslog(@"sender:%@",sender);
}

打印target對象

2017-10-17 16:28:14.407 testimage[5598:172418] sender:<uibarbuttonitem: 0x7ffeda609e20>

兩種方法都使用了imp做消息傳遞。

你更喜歡哪一種?!

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://www.jianshu.com/p/7869e2b126e9

延伸 · 閱讀

精彩推薦
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5282021-01-16
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111312021-03-15
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产原创精品视频 | 天天色视频 | 羞羞的视频 | 中文字幕亚洲欧美 | 日本中文字幕在线电影 | 日韩在线播放一区二区 | 国产精品香蕉在线观看 | 久久精品成人一区二区三区蜜臀 | 久草在线视频网 | 中文字幕免费播放 | 久久91精品 | 羞羞视频免费观看 | 欧美成在线视频 | 亚洲精品日韩激情在线电影 | 久久丁香 | 欧美久 | 日本久久网 | av有声小说一区二区三区 | 欧美精品一区二区三区在线 | 综合一区| 日韩欧美在线看 | 免费看黄色电影 | 日韩一区二区久久 | 亚洲乱码国产乱码精品精98午夜 | 天天操人人干 | 亚洲精品一二三区 | 欧美在线观看一区 | 黄色免费电影网站 | 亚洲一区二区三区免费看 | 国产欧美精品一区二区三区 | 亚洲黄色激情 | 精品久久久99 | 看av网址| 国产人妖在线 | 国产精品1区2区 | 久久久一 | 午夜精品久久久久久久白皮肤 | 亚洲综合日韩欧美 | 国产亲子乱弄免费视频 | 天天看夜夜爽 | 伊人在线 |