Как добавить пользовательскую кнопку на панель навигации?

Я создаю приложение Rubymotion, и мне нужно создать пользовательскую кнопку на панели навигации. Я запускаю код в контроллере.

Я использую этот код:

button = UIBarButtonItem.alloc.init
    button.title = 'Add'
    button.style = UIBarButtonItemStylePlain
    button.target = self
    button.action = 'performAdd'
    button.setBackgroundImage(checkInImage, forState:UIControlStateNormal, forBarMetrics:UIBarMetricsDefault)
    button.setBackgroundImage(checkInPressed, forState:UIControlStateHighlighted, forBarMetrics:UIBarMetricsDefault)
    self.navigationItem.rightBarButtonItem = button

Но я получаю эту ошибку при запуске rake:

Terminating app due to uncaught exception 'NoMethodError', reason: 'first_controller.rb:21:in `button': undefined method `setBackgroundImage' for #<UIBarButtonItem:0x6b3c1d0> (NoMethodError)

РЕШЕНИЕ

    button = UIBarButtonItem.alloc.init
        button.title = 'Add'
        button.target = self
        button.action = 'performAdd'
        button.setBackgroundImage(checkInImage, forState:UIControlStateNormal, barMetrics:UIBarMetricsDefault)
        button.setBackgroundImage(checkInPressed, forState:UIControlStateHighlighted, barMetrics:UIBarMetricsDefault)
self.navigationItem.rightBarButtonItem = button

person Jonathan Clark    schedule 16.11.2012    source источник


Ответы (2)


Насколько я понимаю, это barMetrics, а не forBarMetrics. Так:

setBackgroundImage(checkInImage,
                   forState:UIControlStateNormal, barMetrics:UIBarMetricsDefault)
person Steve Ross    schedule 16.11.2012
comment
Кстати, RubyMotion только что выпустила документацию по API, чтобы вы могли увидеть правильные методы в Ruby вместо того, чтобы использовать справочник Apple по Obj-C: rubymotion.com/developer-center/api/ - person Dylan Markow; 17.11.2012

Я действительно новичок в RubyMotion, но все еще пытаюсь вам помочь. Пожалуйста, простите меня, если я не прав в каком-либо месте.

EDIT: просмотр журнала сбоев Terminating app due to uncaught exception 'NoMethodError', reason: 'first_controller.rb:21:inbutton': неопределенный метод setBackgroundImage' for #<UIBarButtonItem:0x6b3c1d0> (NoMethodError). Я думаю, вы не вызываете правильный метод для установки backgroundImage в вашем View controller, вот почему возникает такое исключение, я так думаю.

И я думаю, что точной причиной может быть метод setBackgroundImage. Я думаю, что это неправильный метод. Он должен быть backgroundImage. Тогда вам следует попробовать строку кода ниже в вашем ViewController.

  button.backgroundImage(checkInPressed, forState:UIControlStateHighlighted, forBarMetrics:UIBarMetricsDefault).

Вот ваш код, просто меняющий эту единственную строку.

  button = UIBarButtonItem.alloc.init
  button.title = 'Add'
  button.style = UIBarButtonItemStylePlain
  button.target = self
  button.action = 'performAdd'
  button.backgroundImage(checkInImage, forState:UIControlStateNormal, forBarMetrics:UIBarMetricsDefault)
  button.backgroundImage(checkInPressed, forState:UIControlStateHighlighted, forBarMetrics:UIBarMetricsDefault)
  self.navigationItem.rightBarButtonItem = button

Вот ссылка на то же самое. Вы должны просмотреть эту ссылку.

Я надеюсь, что вы могли бы получить некоторую идею ..

person Kamar Shad    schedule 16.11.2012
comment
@NSPostWhenIdle Извините, я понял то же самое, что ошибся. Извините еще раз ... я собираюсь удалить или отредактировать это. - person Kamar Shad; 16.11.2012
comment
@NSPostWhenIdle Спасибо, и теперь я ищу решение, чтобы отредактировать свой ответ... - person Kamar Shad; 16.11.2012
comment
Спасибо! Но и это не помогло. - person Jonathan Clark; 17.11.2012
comment
@JonathanClark чувак Не нужно говорить спасибо, я очень рад помочь кому-нибудь со StackOverflow. Ну, в вашем журнале исключений отображается та же причина, что и Crashed.ok Нет, вы пробовали упомянуть ссылку в моем ответе? - person Kamar Shad; 17.11.2012