2016-09-03 4 views
0

У меня есть UIButton likeButton, который будет вызывать likeBtnClicked на .TouchUpinsideДобавление ParentClass в качестве мишени для UIButton

likeButton.addTarget(self.superview, action: "likeBtnClicked:", forControlEvents: UIControlEvents.TouchUpInside) 

Это прекрасно работает, но с предупреждением

«Ни один метод не объявлена ​​с Objective-C селекторе ».

Если likeButton реализуется в одном классе (скажем MyClass), то я бы заменил его

likeButton.addTarget(Myclass, action: #selector(Myclass.likeBtnClicked), forControlEvents: UIControlEvents.TouchUpInside) 

Но как заставить его работать на несколько классов (viewControllers), который хочет использовать «likeButton» без каких-либо предупреждений ??? Этот вопрос подходит для UITapGestureRecognizer.

Вот код образца:

import Foundation 

class SubClass: UIView { 

    var likeButton = UIButton(frame: CGRectMake(0,0,100,50)) 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     addSubview(likeButton) 
     likeButton.addTarget(self.superview, action: "likeBtnClicked:", forControlEvents: UIControlEvents.TouchUpInside) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

class SuperClassA: UIView { 

    let viewHavingBtn = SubClass(frame: CGRectMake(0,0,300,500)) 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     addSubview(viewHavingBtn) 
    } 

    func likeBtnClicked(sender: AAButton) { 
     print(sender.tag) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

class SuperClassB: UIView { 

    let viewHavingBtn = SubClass(frame: CGRectMake(0,0,300,500)) 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     addSubview(viewHavingBtn) 
    } 

    func likeBtnClicked(sender: AAButton) { 
     print(sender.tag) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 
+0

Вы должны использовать шаблон делегата. Плохая идея для вашего UiView предположить, что супервизор реализует конкретный метод. – Paulw11

+0

Спасибо :) @ Paulw11 –

ответ

0

Выполните следующие действия:

1] объявить объект UIButton в суперкласса

2] инициализировать эту кнопку и добавить цель этой кнопки в метод инициализации суперкласса

3] определить метод действия для события касания в суперклассе

4] добавить эту кнопку как подвид в подклассе кнопки для отображения

5] Кнопка коррекции действий реализации методы из суперкласса в подклассе, где вы хотите, чтобы обрабатывать кнопку прикосновений.