Как изменить заголовок Uibutton во время выполнения в цель C? - PullRequest
5 голосов
/ 12 января 2011

Я знаю, что этот вопрос задают много раз, и я также применяю те же принципы для обозначения заголовка uibutton, я думаю.

Позвольте мне сначала прояснить мою проблему. У меня есть одна uibutton с именем btnType, при нажатии на всплывающее окно выбора и после выбора одного значения я нажимаю кнопку «Готово», чтобы скрыть средство выбора, и в то же время я изменяю название uibutton с кодом

[btnType setTitle:btnTitle forState:UIControlEventTouchUpInside];
[btnType setTitleColor:[UIColor redColor] forState:UIControlEventAllEvents];

Но с моим сюрпризом, он не изменяется, и приложение вылетает с сигналом EXC_BAD_ACCESS. Я не понимаю, где я делаю ошибку. Я выделил память для btnType в viewdidLoad. Также я использую

-(IBAction)pressAddType
{
    toolBar.hidden = FALSE;
    dateTypePicker.hidden = FALSE;
}

событие при нажатии на кнопку, чтобы открыть сборщик. Также я хотел бы отметить, что я установил соединение с IB с событием TouchUpInside для pressAddType.

Есть догадки? Буду благодарен, если вы поможете мне. Спасибо.

UPDATE:

@interface AddSettingPage : UIViewController<UITextFieldDelegate>
{
    IBOutlet UIButton *btnType;
    NSString *btnTitle;
}
@property (nonatomic, retain) IBOutlet UIButton *btnType;
-(IBAction)pressAddType;//:(id)sender;

Также

@synthesize btnType,btnTitle;

Ответы [ 4 ]

17 голосов
/ 12 января 2011

try

[yourButton setTitle:@"your title" forState:UIControlStateNormal];
[yourButton setTitle:@"your title" forState:UIControlStateSelected];
[yourButton setTitle:@"your title" forState:UIControlStateHighlighted];

когда сборщик снят, кнопка (которая была элементом управления, удерживающим фокус) будет в выбранном состоянии (или выделена ... проверьте его).

и прекратите использовать UIControlEventTouchUpInside в параметре forState:.это не государство, это событие.вы передаете идентификатор события вместо идентификатора состояния

4 голосов
/ 12 января 2011

Состояние, которое вы передаете в setTitle, должно быть примерно таким: UIControlStateNormal:

[b setTitle:@"" forState:UIControlStateNormal];
1 голос
/ 12 января 2011

Этот ответ почему бы не изменить только заголовок кнопки, ошибка EXC_BAD_ACCESS появляется только тогда, когда объект, к которому вы пытаетесь обратиться, не находится в памяти стека или этот объект имеет нулевое значение. Так что мой совет, пожалуйста, проверьте ваш объект (btnTitle) в памяти или нет?

1 голос
/ 12 января 2011

вместо

- (IBAction) pressAddType;

объявить

- (IBAction) pressAddType:(id)sender; //or  (UIButton *)sender

и определите его следующим образом:

-(IBAction)pressAddType:(id)sender
{
    toolBar.hidden = FALSE;
    dateTypePicker.hidden = FALSE;

    [(UIButton *)sender setTitle:btnTitle forState:UIControlEventTouchUpInside];
    [(UIButton *)sender setTitleColor:[UIColor redColor] forState:UIControlEventAllEvents];
}

Как видите, вам не нужно, чтобы ваша кнопка была в качестве ивара, поскольку при нажатии она передается как параметр метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...