2015-09-14 2 views
2

Я участвую в процессе обучения Swift, и у меня есть основной вопрос. Я не хочу использовать Storyboard, и я хочу создать кнопку с кодом. На данный момент я программирую эту кнопку следующим образом:Создайте пользовательскую кнопку с Swift, расширив класс UIButton

let button1: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton 
button1.setImage(UIImage(named: "myImage.png"), forState: UIControlState.Normal) 
button1.addTarget(self, action: "myMethod", forControlEvents: UIControlEvents.TouchUpInside) 
button1.frame = CGRectMake(0, 0, 25, 25) // then I add this button to a navigation control 

Это работает, но я ищу что-то немного другое. То есть: я хочу создать класс, я хочу передать хотя бы имя изображения, метод, который должна вызвать кнопка, и кадр. Более того, я хочу создать экземпляр кнопки в моем ViewController всякий раз, когда захочу.

Я нашел много сообщений здесь, но никакое сообщение не было действительно полезно (какой-то код не работал).

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

ответ

2
enum SPBarButtonTypes { 
    case openDrawer 
    case loginInfo 
} 

class SPBarButtonFactory: NSObject { 

    class func createBarButtonItemOfType (buttonType: SPBarButtonTypes, withTarget buttonTarget: AnyObject, andAction buttonAction: Selector) -> UIBarButtonItem { 
     var returnButton: UIBarButtonItem = UIBarButtonItem() 
     returnButton.target = buttonTarget 
     returnButton.action = buttonAction 

     switch buttonType { 
      case .openDrawer: 
       returnButton.image = UIImage(named: "ic_menu") 
      case .loginInfo: 
       returnButton.image = UIImage(named: "ic_info_outline") 
     default: NSLog("Wrong BarButton type") 
     } 

     return returnButton 
    } 

} 

ADDED УЛУЧШИТЬ К.П

Это просто «швы» как класс вложен в другой класс, но это действительно Стрижи способ объявить класс-метод ....

Эта строка объявляет класс с именем SPBarButtonFactory

class SPBarButtonFactory... 

Эта строка объявляет класс-метод SPBarButtonFactory

class func createBarButtonItemOfType... 
+0

Это имеет смысл для вас? Или я должен описать это еще немного? –

+0

Это нормально, я немного удивлен, увидев класс, вложенный в другой класс :-) –

+0

Хорошо, я установил его таким образом, он отлично работал, спасибо: 'let btn = SPBarButtonFactory.createBarButtonItemOfType (.openDrawer, withTarget : self, andAction: «none») self.navigationItem.rightBarButtonItem = btn' –

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