2013-08-26 291 views
1

我創建了5按鈕編程方式,我給對方的標籤,這個代碼塊是在for循環。單選按鈕像單選按鈕

   button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
       button.tag= [[answersID objectAtIndex:m]integerValue]; 


       button.frame = CGRectMake(760*i, 198, 760, 60); 

       UIImage *buttonImage = [UIImage imageNamed:@"Grey.png"]; 
       [button setBackgroundImage:buttonImage forState:UIControlStateNormal]; 

       [button addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside]; 

點擊按鈕後,選定的按鈕正在改變圖像本身。

- (IBAction)clickButton:(id)sender{ 
buttonPlusID=[sender tag]; 

if ([sender isSelected]) { 
    [sender setImage:unselected forState:UIControlStateNormal]; 
    //[sender setSelected:NO]; 
} else { 
    [sender setImage:selected forState:UIControlStateSelected]; 
    [sender setSelected:YES]; 
} 

但我想這個。我有5個按鈕,這些圖像是grey.png。我點擊了一個按鈕,按鈕的圖像改變了green.png,然後我點擊了另一個按鈕,它將改變green.png,並且green.png將改變grey.png。像一個單選按鈕。有什麼辦法嗎?

對不起,我的英語不好。謝謝你的關注。

最好的問候。

回答

3

是的,這是一件非常常見的事情。我創建了自己的班級來處理這種情況。 這個類叫做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];

嘗試這些步驟,讓我知道如何去爲您服務。

+0

我真的很抱歉,我是新的ios,所以你能幫我整合嗎?你有沒有關於它的例子?謝謝 –

+0

@ TwentyThr23當然,讓我更新我的答案 – LuisCien

+0

好的非常感謝你 –

1

跟蹤上次選擇的按鈕。然後點擊一個按鈕時,重置之前選擇的按鈕,然後更新新點擊的按鈕。