2015-03-12 3 views
-3

Когда я нажимаю на ничего UIButton произошлоUIButton программно не работает в прошивкой

checkbox = [[UIButton alloc] initWithFrame:CGRectMake(73, 324, 15, 15)]; 
[checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox.png"] forState:UIControlStateNormal]; 
[checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox-checked.png"] forState:UIControlStateSelected]; 
[checkbox addTarget:self action:@selector(autologin) forControlEvents:UIControlEventTouchUpInside]; 
[self.background addSubview:checkbox]; 
+0

для любой кнопки, созданного программно не работает на контроллере представления – raghunadh

+0

2015-03-12 16: 02: 07.228 Sportslion Ios App [ 71668: 2157973] Предупреждение. Попробуйте представить в , чей вид не находится в иерархии окон! – raghunadh

+0

Можете ли вы опубликовать немного больше кода, например, действие 'autologin'? – Yoko

ответ

2

Вы должны создать кнопку, как показано ниже.

UIButton *checkbox = [UIButton buttonWithType:UIButtonTypeCustom]; // this is important 
checkbox.frame = CGRectMake(73, 324, 15, 15)]; 
[checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox.png"] forState:UIControlStateNormal]; 
[checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox-checked.png"] forState:UIControlStateSelected]; 
[checkbox addTarget:self action:@selector(autologin) forControlEvents:UIControlEventTouchUpInside]; 
[self.background addSubview:checkbox]; 

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

Если все еще не работает, то self.background addSubview должно быть self.view addSubview.

Что такое self.background?

+0

Я хочу кнопку фонового изображения фона - объект изображения – raghunadh

+0

кнопка видна, но если я нажимаю на кнопку ничего не происходит – raghunadh

0

Проверьте userInteractionEnabled объект недвижимости background.

Но я понимаю, почему у вас нет обратной связи на кнопки, если остальное прекрасно - вы используете UIControlStateSelected для настройки изображения, когда кнопка имеет контакт, но вы должны использовать UIControlStateHighlighted

+0

Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат] (http://chat.stackoverflow.com/rooms/72849/discussion-on-answer-by-nikita-ivaniushchenko-uibutton-programatically-is-not-wo). – Taryn

+0

Точно, но я все еще вижу, что начальная проблема не решена - так что до сих пор не знаю, в чем причина. И все делали предположения о своих причинах. –

+0

Я уже проверял, что это отлично – raghunadh

0

Ваш код прекрасно. Вам нужно проверить следующее.

  • проверить ли self.background правильно помещен в вашем взгляде иерархии, я попробовал ваш код с self.view вместо self.background, как показано ниже, и она прекрасно работает.
self.checkbox = [[UIButton alloc] initWithFrame:CGRectMake(73, 324, 50, 50)]; 
[self.checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox1.png"] forState:UIControlStateNormal]; 
[self.checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox2.png"] forState:UIControlStateSelected]; 
[self.checkbox addTarget:self action:@selector(autologin) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:self.checkbox]; 
  • Из сообщения об ошибке, которое вы дали "

    Предупреждение: Попытка представить <enter_the_den: 0x7fbf1bd4c4e0> на <ViewController: 0x7fbf1bc771c0> чей вид не в иерархии окон

Я подозреваю, что проблема заключается в вашем коде внутри метода autologin, просто прокомментируйте весь код в своем методе и просто попробуйте журнал, он должен работать.

см это: whose view is not in the window hierarchy

+0

Их код не совсем точный, поскольку они должны использовать '[UIButton buttonWIthType:]' вместо '[[UIButton alloc] initWithFrame:]', поскольку это ничего не сделает , Так что ваш ответ неверен – Popeye

+0

@Popeye, Can u pls оправдывает ваш комментарий, я тестировал этот код, и он отлично работает для меня. – karthik

+0

Прочитайте документацию на яблоко вокруг 'UIButton' и создайте кнопки, и вы поймете, почему вы должны использовать' buttonWIthType', а не 'initWithFrame:'. – Popeye

0

Если вы читали Apple Documentation for UIButton и смотрите под заголовком помеченный как Создание кнопки вы увидите, что способ создания UIButton является использование buttonWithType: и не initWithFrame:.

Возвращаемое значение

Вновь созданный кнопку.

Обсуждение

Этот метод является удобство конструктора для создания объектов кнопок с конкретными конфигурациями.Если вы подклассифицируете UIButton, этот метод не возвращает экземпляр вашего подкласса. Если вы хотите создать экземпляр определенного подкласса, вы должны напрямую указать/запустить кнопку.

При создании пользовательской кнопки - кнопки с типом UIButtonTypeCustom - исходный кадр кнопки установлен на (0, 0, 0, 0). Прежде чем добавлять кнопку в свой интерфейс, вы должны обновить фрейм до более подходящего значения.

Единственный раз, когда вы должны использовать alloc/init с UIButton когда вы подклассы UIButton однако ваш метод инициализации должен затем реализовать buttonWithType: и передать в UIButtonTypeCustom.

Меняем:

checkbox = [[UIButton alloc] initWithFrame:CGRectMake(73, 324, 15, 15)]; 

Для

// Create a button of type custom 
checkbox = [UIButton buttoWithType:UIButtonTypeCustom]; 
// Now set the frame for your button 
[checkbox setFrame:CGRectMake(73, 324, 15, 15)]; 
// Continue with the rest of your button code 
[checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox.png"] forState:UIControlStateNormal]; 
[checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox-checked.png"] forState:UIControlStateSelected]; 
[checkbox addTarget:self action:@selector(autologin) forControlEvents:UIControlEventTouchUpInside]; 
[self.background addSubview:checkbox]; 
Смежные вопросы