Swift — вызов функции при нажатии кнопки — в экземпляр отправляется нераспознанный селектор

Я программно добавляю некоторые кнопки на панель инструментов, используя swift. Я видел, как добавить действие к кнопке, и я думаю, что делаю это правильно, но, очевидно, это не так, потому что я продолжаю получать «неопознанный селектор, отправленный в экземпляр», когда я нажимаю кнопку. Что я делаю не так?

Вот как я добавляю кнопки на панель инструментов:

func addButtonsToToolbar(view: UIView?)
{
    let userTrackingArrow = MKUserTrackingBarButtonItem(mapView: self.mapView)
    let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
    let refresh: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Refresh, target: view, action: "refreshbuttonTapped:")

    var items = [UIBarButtonItem]()
    items.append(userTrackingArrow)
    items.append(flexSpace)
    items.append(refresh)

    self.toolBar.items = items
}

Это функция, которую я хочу вызывать при нажатии кнопки «обновить», но она не вызывается. Вместо этого я получаю «неопознанный селектор, отправленный в экземпляр».

func refreshbuttonTapped(sender: AnyObject!)
{
    print("Button tapped")
}

person Arthur Garza    schedule 20.08.2015    source источник
comment
Где func refreshbuttonTapped(sender: AnyObject!)? В одном классе с func addButtonsToToolbar(view: UIView?)? А что такое (view: UIView?)?   -  person tuledev    schedule 20.08.2015
comment
Да, он определен в том же классе, что и addButtonsToToolbar, а вид — self.mapView.   -  person Arthur Garza    schedule 20.08.2015
comment
Если вы опубликуете ошибку из консоли, это поможет. Как уже упоминалось, он, вероятно, ищет кнопку обновления, нажатую на неправильном представлении. Возможно, вам понадобится self, который будет вашим контроллером представления.   -  person Jeremiah    schedule 20.08.2015


Ответы (2)


Попробуйте изменить цель кнопки обновления:

let refresh: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Refresh, target: view, action: "refreshbuttonTapped:")

to:

let refresh: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Refresh, target: self, action: "refreshbuttonTapped:")
person tuledev    schedule 20.08.2015

Метод refreshbuttonTapped() должен быть реализован в классе target, это view, переданный в качестве параметра в addButtonsToToolbar().

person vadian    schedule 20.08.2015