2013-03-24 3 views
0

У меня есть 10 или около кнопки установки внутри метода следующим образом:UIButton setHidden не работает сейчас?

@implementation MyViewController 
UIButton *originalButton; 

etc... 

- (void)setupButtons 
{ 
    originalButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [originalButton addTarget:self action:@selector(originalButtonWasPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    originalButton.frame = CGRectMake(20.0, 30.0, 100.0, 39.0); 
    UIImage *buttonImage = [[UIImage imageNamed:@"originalreg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(18, 18, 18, 18)]; 
    UIImage *buttonImageHighlight = [[UIImage imageNamed:@"originalregblue.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(18, 18, 18, 18)]; 
    [originalButton setBackgroundImage:buttonImage forState:UIControlStateNormal]; 
    [originalButton setBackgroundImage:buttonImageHighlight forState:UIControlStateHighlighted]; 
    [self.view addSubview:originalButton]; 

    etc… 
} 

я решил вытащить общий код в другой метод для повышения эффективности:

- (void)setupButton:(UIButton *)myButton withSelector:(SEL)selector withX:(CGFloat)x withY:(CGFloat)y withRegImage:(NSString *)regImage withHighlightImage:(NSString *)highlightImage 
{ 
    myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [myButton addTarget:self action:selector forControlEvents:UIControlEventTouchUpInside]; 
    myButton.frame = CGRectMake(x, y, 100.0, 39.0); 
    UIImage *buttonImage = [[UIImage imageNamed:regImage] resizableImageWithCapInsets:UIEdgeInsetsMake(18, 18, 18, 18)]; 
    UIImage *buttonImageHighlight = [[UIImage imageNamed:highlightImage] resizableImageWithCapInsets:UIEdgeInsetsMake(18, 18, 18, 18)]; 
    [myButton setBackgroundImage:buttonImage forState:UIControlStateNormal]; 
    [myButton setBackgroundImage:buttonImageHighlight forState:UIControlStateHighlighted]; 
    [self.view addSubview:myButton]; 
} 

... и назвать его как таковой:

- (void)setupButtons 
{ 
    [self setupButton:originalButton withSelector:@selector(originalButtonWasPressed:) withX:20.0 withY:30.0 withRegImage:@"originalreg.png" withHighlightImage:@"originalregblue.png"]; 

    etc... 
} 

эТО вСЕ РАБОТАЕТ исключения, одна из моих кнопок используются, чтобы скрыть все остальное. В исходной настройке нажатие кнопки «Скрыть кнопки» привело к тому, что остальные кнопки были скрыты. Теперь они остаются на экране. Вот код, который:

[self setupButton:hideButtonsButton withSelector:@selector(hideButtonsButtonWasPressed:) withX:20.0 withY:530.0 withRegImage:@"hidebuttonsreg.png" withHighlightImage:@"hidebuttonsregblue.png"]; 

- (void)hideButtonsButtonWasPressed:(id)sender 
{ 
    // hide the buttons 
    originalButton.hidden = YES; 
    originalButton.enabled = NO; 

    etc… 
} 

Я подтвердил этот метод вызывается и setHidden/setEnabled вызовов выполняется.

Любые указатели с благодарностью получили! Тони.

ответ

1

его потому, что ваш метод использует один экземпляр все время. посмотреть на первой строке инициализации

myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

заменить эту строку

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

он возвращает новый экземпляр кнопки каждый раз.

Вы представили экземпляр кнопки, как показано ниже, справа.

IBOutlet UIButton *btn1, *btn2, *btn3; 

Теперь создайте новую кнопку с методом, как вы делали раньше, просто назначить эту кнопку для уважаемого объекта кнопки

btn1 = [self setupButton:originalButton withSelector:@selector(originalButtonWasPressed:) withX:20.0 withY:30.0 withRegImage:@"originalreg.png" withHighlightImage:@"originalregblue.png"]; 

btn2 = [self setupButton:originalButton withSelector:@selector(duplicateButtonWasPressed:) withX:20.0 withY:30.0 withRegImage:@"duplicatereg.png" withHighlightImage:@"originalregblue.png"]; 

btn3 = [self setupButton:originalButton withSelector:@selector(olderButtonWasPressed:) withX:20.0 withY:30.0 withRegImage:@"olderreg.png" withHighlightImage:@"originalregblue.png"]; 
+0

Я смущен, что, поскольку я объявляю все UIButtons в верхнем (поэтому они доступны для всех моих методов). Я думал, что передача этих данных в 'setupButton: withSelector ...' приведет к отдельным экземплярам для каждого из них? Если я сделаю так, как вы говорите, я не смогу использовать экземпляр кнопки в других методах этого класса? – Tony

+0

мой дорогой друг, тогда вам нужно передать объект этой кнопки в свой индивидуальный метод, чтобы получить экземпляр объявленной кнопки. ваш объявленный метод делает то, что я объяснил. он возвращает только один экземпляр. но вы можете назначить этот экземпляр любой объявленной вами кнопке. –

+0

Позвольте мне изменить свой ответ на примере. –

Смежные вопросы