详解iOS-按钮单选与多选逻辑处理

2025-05-29 0 102

我们经常会有多行多列按钮的页面, 这个时候我们通常会选择循环创建按钮, 然后进行按钮单选或者多选的操作!

一. 单选逻辑处理

详解iOS-按钮单选与多选逻辑处理

1. 创建按钮控件数组及标签数组, 并升级当前选中按钮为属性,方便使用

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15
#define zlunselectedcolor [uicolor colorwithred:(241)/255.0 green:(242)/255.0 blue:(243)/255.0 alpha:1.0]

#define zlselectedcolor [uicolor colorwithred:(108)/255.0 green:(187)/255.0 blue:(82)/255.0 alpha:1.0]

@interface zlradioviewcontroller ()

// 标签数组(按钮文字)

@property (nonatomic, strong) nsarray *markarray;

// 按钮数组

@property (nonatomic, strong) nsmutablearray *btnarray;

// 选中按钮

@property (nonatomic, strong) uibutton *selectedbtn;

@end

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
#pragma mark - 懒加载

- (nsarray *)markarray {

if (!_markarray) {

nsarray *array = [nsarray array];

array = @[@"14", @"15", @"16", @"17", @"18"];

_markarray = array;

}

return _markarray;

}

- (nsmutablearray *)btnarray {

if (!_btnarray) {

nsmutablearray *array = [nsmutablearray array];

_btnarray = array;

}

return _btnarray;

}

2. 创建单选视图, 循环创建按钮, 并回显上次选中值

?

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

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47
- (void)setupradiobtnview {

cgfloat ui_view_width = [uiscreen mainscreen].bounds.size.width;

cgfloat marginx = 15;

cgfloat top = 100;

cgfloat btnh = 30;

cgfloat width = (250 - marginx * 4) / 3;

// 按钮背景

uiview *btnsbgview = [[uiview alloc] initwithframe:cgrectmake((ui_view_width - 250) * 0.5, 50, 250, 300)];

btnsbgview.backgroundcolor = [uicolor whitecolor];

[self.view addsubview:btnsbgview];

// 循环创建按钮

nsinteger maxcol = 3;

for (nsinteger i = 0; i < 5; i++) {

uibutton *btn = [uibutton buttonwithtype:uibuttontypecustom];

btn.backgroundcolor = zlunselectedcolor;

btn.layer.cornerradius = 3.0; // 按钮的边框弧度

btn.clipstobounds = yes;

btn.titlelabel.font = [uifont boldsystemfontofsize:12];

[btn settitlecolor:[uicolor colorwithred:(102)/255.0 green:(102)/255.0 blue:(102)/255.0 alpha:1.0] forstate:uicontrolstatenormal];

[btn settitlecolor:[uicolor whitecolor] forstate:uicontrolstateselected];

[btn addtarget:self action:@selector(choosemark:) forcontrolevents:uicontroleventtouchupinside];

nsinteger col = i % maxcol; //列

btn.x = marginx + col * (width + marginx);

nsinteger row = i / maxcol; //行

btn.y = top + row * (btnh + marginx);

btn.width = width;

btn.height = btnh;

[btn settitle:self.markarray[i] forstate:uicontrolstatenormal];

[btnsbgview addsubview:btn];

btn.tag = i;

[self.btnarray addobject:btn];

}

// 创建完btn后再判断是否能选择(之前是已经选取过的)

// 假数据:之前已经上传16时,则回显16

for (uibutton *btn in btnsbgview.subviews) {

if ([@"16" isequaltostring:btn.titlelabel.text]) {

btn.selected = yes;

btn.backgroundcolor = zlselectedcolor;

break;

}

}

}

3. 数字按钮单选处理, 根据tag值去判断是否是当前选中按钮

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24
- (void)choosemark:(uibutton *)sender {

nslog(@"点击了%@", sender.titlelabel.text);

self.selectedbtn = sender;

sender.selected = !sender.selected;

for (nsinteger j = 0; j < [self.btnarray count]; j++) {

uibutton *btn = self.btnarray[j] ;

if (sender.tag == j) {

btn.selected = sender.selected;

} else {

btn.selected = no;

}

btn.backgroundcolor = zlunselectedcolor;

}

uibutton *btn = self.btnarray[sender.tag];

if (btn.selected) {

btn.backgroundcolor = zlselectedcolor;

} else {

btn.backgroundcolor = zlunselectedcolor;

}

}

二. 多选逻辑处理

详解iOS-按钮单选与多选逻辑处理

1. 创建按钮控件数组和标签字典, 及选中标签数组(数字)和选中标签数组(文字字符串), 为了展示及上传按钮数据使用

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18
#define zlunselectedcolor [uicolor colorwithred:(241)/255.0 green:(242)/255.0 blue:(243)/255.0 alpha:1.0]

#define zlselectedcolor [uicolor colorwithred:(128)/255.0 green:(177)/255.0 blue:(34)/255.0 alpha:1.0]

@interface zlmultiselectcontroller ()

// 标签数组

@property (nonatomic, strong) nsarray *markarray;

// 标签字典

@property (nonatomic, strong) nsdictionary *markdict;

// 选中标签数组(数字)

@property (nonatomic, strong) nsmutablearray *selectedmarkarray;

// 选中标签数组(文字字符串)

@property (nonatomic, strong) nsmutablearray *selectedmarkstrarray;

@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

30

31

32

33

34

35

36

37

38

39

40
#pragma mark - 懒加载

- (nsarray *)markarray {

if (!_markarray) {

nsarray *array = [nsarray array];

array = @[@"导购", @"客服", @"家教", @"礼仪", @"主持"];

_markarray = array;

}

return _markarray;

}

// 上传通过文字key取数字value发送数字

- (nsdictionary *)markdict {

if (!_markdict) {

nsdictionary *dict = [nsdictionary dictionary];

dict = @{

@"导购" : @"3" ,

@"客服" : @"7",

@"家教" : @"9",

@"礼仪" : @"10",

@"主持" : @"11",

};

_markdict = dict;

}

return _markdict;

}

- (nsmutablearray *)selectedmarkarray {

if (!_selectedmarkarray) {

_selectedmarkarray = [nsmutablearray array];

}

return _selectedmarkarray;

}

- (nsmutablearray *)selectedmarkstrarray {

if (!_selectedmarkstrarray) {

_selectedmarkstrarray = [nsmutablearray array];

}

return _selectedmarkstrarray;

}

2.循环创建按钮视图, 循环创建按钮

?

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

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48
- (void)setupmultiselectview {

cgfloat ui_view_width = [uiscreen mainscreen].bounds.size.width;

cgfloat marginx = 15;

cgfloat top = 19;

cgfloat btnh = 35;

cgfloat marginh = 40;

cgfloat height = 130;

cgfloat width = (ui_view_width - marginx * 4) / 3;

// 按钮背景

uiview *btnsbgview = [[uiview alloc] initwithframe:cgrectmake(0, 100, ui_view_width, height)];

btnsbgview.backgroundcolor = [uicolor whitecolor];

[self.view addsubview:btnsbgview];

// 循环创建按钮

nsinteger maxcol = 3;

for (nsinteger i = 0; i < 5; i++) {

uibutton *btn = [uibutton buttonwithtype:uibuttontypecustom];

btn.backgroundcolor = zlunselectedcolor;

btn.layer.cornerradius = 3.0; // 按钮的边框弧度

btn.clipstobounds = yes;

btn.titlelabel.font = [uifont boldsystemfontofsize:14];

[btn settitlecolor:[uicolor colorwithred:(102)/255.0 green:(102)/255.0 blue:(102)/255.0 alpha:1.0] forstate:uicontrolstatenormal];

[btn settitlecolor:[uicolor whitecolor] forstate:uicontrolstateselected];

[btn addtarget:self action:@selector(choosemark:) forcontrolevents:uicontroleventtouchupinside];

nsinteger col = i % maxcol; //列

btn.x = marginx + col * (width + marginx);

nsinteger row = i / maxcol; //行

btn.y = top + row * (btnh + marginx);

btn.width = width;

btn.height = btnh;

[btn settitle:self.markarray[i] forstate:uicontrolstatenormal];

[btnsbgview addsubview:btn];

}

// 确定按钮

uibutton *surebtn = [uibutton buttonwithtype:uibuttontypecustom];

[surebtn settitle:@"确定" forstate:uicontrolstatenormal];

surebtn.frame = cgrectmake(marginx * 2, cgrectgetmaxy(btnsbgview.frame) + marginh, ui_view_width - marginx * 4, 40);

surebtn.titlelabel.font = [uifont boldsystemfontofsize:16];

[surebtn addtarget:self action:@selector(surebtnclick) forcontrolevents:uicontroleventtouchupinside];

surebtn.backgroundcolor = [uicolor orangecolor];

surebtn.layer.cornerradius = 3.0;

surebtn.clipstobounds = yes;

[self.view addsubview:surebtn];

}

3. 按钮多选逻辑处理, 并上传数据请求处理

?

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

30

31

32
/**

* 按钮多选处理

*/

- (void)choosemark:(uibutton *)btn {

btn.selected = !btn.selected;

if (btn.isselected) {

btn.backgroundcolor = zlselectedcolor;

[self.selectedmarkarray addobject:self.markdict[btn.titlelabel.text]];

[self.selectedmarkstrarray addobject:btn.titlelabel.text];

} else {

btn.backgroundcolor = zlunselectedcolor;

[self.selectedmarkarray removeobject:self.markdict[btn.titlelabel.text]];

[self.selectedmarkstrarray removeobject:btn.titlelabel.text];

}

}

/**

* 确认接口请求处理

*/

- (void)surebtnclick {

// 用户选择标签后就把值上传, 也要传给服务器下次直接请求回来

// 按钮数字标识字符串

nsstring *numstr = [self.selectedmarkarray componentsjoinedbystring:@","];

// 按钮文字字符串

nsstring *str = [self.selectedmarkstrarray componentsjoinedbystring:@","];

// 测试:拼接请求参数

nslog(@"按钮数字标识字符串:%@", numstr);

nslog(@"按钮文字字符串:%@", str);

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 详解iOS-按钮单选与多选逻辑处理 https://www.kuaiidc.com/90581.html

相关文章

发表评论
暂无评论