是的,這是一件非常常見的事情。我創建了自己的班級來處理這種情況。 這個類叫做ControlGroup,唯一的責任是跟蹤你添加到它的所有UIControls,並且只選擇其中的一個。控件(在你的情況下是UIButton)不需要知道任何關於對方的信息,你可以擁有任意數量的控件。當你完成它們的時候,不要忘記刪除控件,因爲這個類將保留它的元素。
這就是:
的* .h文件中:
// This is a very simple class whose only purpose in life is to manage a group of
// UIControls in a way that only one of them is selected at any one time
@interface ControlGroup : NSObject
-(void)addControl:(UIControl*)control;
-(void)removeControl:(UIControl*)control;
-(UIControl*)currentlySelectedControl;
@end
的* .m文件:
#import "ControlGroup.h"
@interface ControlGroup()
@property (nonatomic, strong) NSMutableSet *controls;
@end
@implementation ControlGroup
@synthesize controls = _controls;
-(id)init {
if ((self = [super init])) {
_controls = [[NSMutableSet alloc] init];
}
return self;
}
-(void)addControl:(UIControl*)control {
if (![self.controls containsObject:control]) {
[self.controls addObject:control];
[control addTarget:self action:@selector(controlTouched:) forControlEvents:UIControlEventTouchUpInside];
}
}
-(void)removeControl:(UIControl *)control {
if ([self.controls containsObject:control]) {
[control removeTarget:self action:@selector(controlTouched:) forControlEvents:UIControlEventTouchUpInside];
[self.controls removeObject:control];
}
}
-(void)controlTouched:(id)sender {
if ([sender isKindOfClass:[UIControl class]]) {
UIControl *selectedControl = (UIControl*)sender;
for (UIControl *control in self.controls) {
[control setSelected:FALSE];
}
[selectedControl setSelected:TRUE];
}
}
-(UIControl*)currentlySelectedControl {
UIControl *selectedControl = nil;
for (UIControl *control in self.controls) {
if ([control isSelected]) {
selectedControl = control;
break;
}
}
return selectedControl;
}
-(NSString*)description {
return [NSString stringWithFormat:@"ControlGroup; no. of elements: %d, elements: %@\n", self.controls.count, self.controls];
}
@end
希望這有助於!
編輯:如何使用這個類
你必須做的第一件事是導入你要去的地方使用它。在你的情況下,它會在您創建按鈕類:
1)導入類#import "ControlGroup.h"
然後,你必須申報財產,以保持較強的參考吧
2)在您的* .h文件中添加以下內容:@property (nonatomic, strong) ControlGroup *controlGroup;
之後,在你的init方法,你必須創建對象:
3)添加這是你的init方法中:_controlGroup = [[ControlGroup alloc] init];
現在您對可以使用的ControlGroup對象有強烈的參考。下一步你需要做的是創建你的按鈕。我相信你已經有了這一步。
4)創建你的按鈕。在創建和配置按鈕時,請使用UIButton
的方法setImage:forState
,併爲UIControlStateNormal
狀態設置一個圖像,併爲UIControlStateSelected
狀態設置另一個圖像。
最後,對於您創建的每個按鈕,都必須將其添加到您擁有的controlGroup
對象。
5)每個按鈕添加到ControlGroup對象:[self.controlGroup addControl:myButton];
嘗試這些步驟,讓我知道如何去爲您服務。
我真的很抱歉,我是新的ios,所以你能幫我整合嗎?你有沒有關於它的例子?謝謝 –
@ TwentyThr23當然,讓我更新我的答案 – LuisCien
好的非常感謝你 –