2017-01-31 3 views
0

Я программно сгенерировал серию кнопок в своем приложении, и они отлично работают, когда они нажаты. Затем я сохранил в памяти количество кнопок и, когда я перезапущу приложение, кнопки регенерируются точно так, как они были раньше, и все же они не могут быть нажаты. Метод «deletebtn» печатает «при нажатии» при нажатии кнопки, но это не так. Я даже попытался добавить к свойствам программно сгенерированной кнопки «buttonName.userInteractionEnabled = true», но ничего не меняется.Программируемые кнопки не могут быть нажаты при перезапуске приложения

Это те свойства кнопки, а также код, который я есть на viewdidload, которая воссоздает столько кнопок, сколько их количество, что я хранится в памяти:

let btn: UIButton = UIButton(frame: CGRectMake(10, CGFloat(60*a), ScreenWidth - 20 , 50))  
btn.layer.cornerRadius = 0.5 * btn.bounds.size.height 
btn.backgroundColor = UIColor.whiteColor() 
btn.setTitleColor(UIColor.blackColor(), forState: .Normal) 
btn.setTitle(ArrayService[(index)], forState: UIControlState.Normal) 
btn.addTarget(self, action: Selector("deletebtn:"), forControlEvents: UIControlEvents.TouchUpInside) 
btn.tag = a //an int variable that is increased each time i create a neew button 
btn.userInteractionEnabled = true 
self.ScrollPwd.addSubview(btn) 

И вот метод deletebtn:

func deletebtn(sender:UIButton){ 
     print("pressed") 
} 

ScrollView - это то место, где я помещал свои кнопки. Я попытался добавить «ScrollPwd.userInteractionEnabled = true», и все же я могу просто прокручивать кнопки, но я не могу их нажимать.

Вы можете мне помочь?

+2

Пожалуйста, покажите свой код – Pierce

+0

Не сохраняйте кнопку. Сохраняйте только его свойства и воссоздавайте их по мере необходимости. –

+0

Без какого-либо кода - по крайней мере, то, что выполняется при перезапуске вашего приложения - это невозможно ** узнать, как помочь. http://stackoverflow.com/help/mcve – dfd

ответ

0

Мне это удалось. На самом деле это довольно неудобно: что происходит, просто при перезапуске приложения журналы больше не отображаются.

+1

Рад, что вы смогли решить эту проблему самостоятельно. Отлично сработано! –

0

Я думаю, что большая проблема заключалась в том, как вы определяете действие. Вот обновленная версия (в Swift 3)

let btn: UIButton = UIButton(frame: CGRect(x: 10, y: 60 * indexButton, width: screenWidth - 20, height: 50)) 
btn.layer.cornerRadius = 0.5 * btn.bounds.size.height 
btn.backgroundColor = UIColor.white 
btn.setTitleColor(UIColor.black, for: .normal) 
btn.setTitle(arrayService[indexButton], for: .normal) 
btn.addTarget(self, action: #selector(self.deletebtn), for: .touchUpInside) 

btn.tag = indexButton 
self.scrollPwd.addSubview(btn) 

Я не мог не изменять (исправлять) некоторые из ваших имен переменных. Вам следует попытаться избежать заглавных букв имен переменных, потому что это зарезервировано для имен классов, поэтому ScreenWidth действительно должно быть screenWidth, и когда у вас уже есть переменная index, вам не нужна идентичная, случайно названная переменная a для хранения той же информации. Кроме того, indexButton сообщает нам, что индекс используется для

+0

Строка «btn.addTarget (self, action: #selector (self.deletebtn), для: .touchUpInside)" дает мне ошибку. В нем говорится, что я должен заменить его «forControlEvents: .touchUpInside» –

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