Как изменить текст кнопки в iOS из класса, отличного от viewController?

0

Я хотел бы изменить текст моего UIBarButtonItem из другого класса (object-С++), который я использую в своем проекте.

У меня есть настройка myButton IBOutlet в myViewController, и я могу успешно сделать что-то вроде:

[ myButton setTitle:@"newTitle" ];

в myViewController.mm

Теперь я хотел бы сделать то же самое, но из myCppClass, который я использую в своем проекте.

Есть ли способ для myCppClass получить доступ к myViewController myButton? Должен ли я использовать какой-либо механизм делегирования?

Я новичок в Ios и объектив-C.

Благодаря,

ромовая баба

  • 0
    Есть ли причина, по которой вы не можете изменить класс c ++ на целевой c ++? Это должно позволить вам вызывать метод напрямую. Если нет, см. Принятый ответ на этот вопрос: stackoverflow.com/questions/1061005/… для отличного объяснения создания обертки ac / c ++ для целевых функций c.
  • 0
    Класс на самом деле объективный с ++. Извините, я не очень ясно Я отредактировал свой вопрос, чтобы отразить это. Как бы я "вызвал метод напрямую", поскольку он принадлежит другому классу?
Теги:

3 ответа

1
Лучший ответ

Создайте метод в классе myViewController для изменения названия кнопки, затем вызовите этот метод из myCppClass, выполнив инструкции, описанные в этом ответе:

Как вызвать метод из одного класса в другой (iOS) qaru.site/questions/772101/...

1

Короткий ответ: нет. Вы должны рассматривать представления диспетчера представлений как частные. Вместо этого добавьте метод в ваш VC, например changeButtonTitle. Затем вызовите этот метод из другого класса.

  • 0
    Благодарю. Я не знаю, как «вызвать этот метод из моего другого класса». Как я могу сообщить другому классу о методе моего первого класса?
0

Ответы выше верны, но из ваших комментариев я подозреваю, что вы еще не счастливы.

Если вы слишком ленивы, и вы не возражаете, чтобы строка была одинаковой во всех экземплярах VC (что на практике обычно имеет место), вы можете просто написать getter и setter для имени строки в качестве переменной класса в целевой класс. Таким образом, вам даже не нужен доступ к фактическому экземпляру класса, просто его имя. Теский, но очень легкий.

Как указывали другие, не пытайтесь напрямую изменять кнопки на другом VC. Передайте сообщение, и владейте VC, когда он загружается.

Ну, передача сообщений вперед (на новый VC) очень проста. В нижней части каждого кода класса VC вы видите раздел навигации #pragma, который дает вам дескриптор целевого VC. Внесите его в соответствующий тип и задайте свойства в экземпляре VC места назначения. В вашем случае создайте общедоступное свойство NSString, которое содержит текст кнопки в выбранном VC, и установите его в разделе навигации. Это может быть любой класс или даже делегат, но простая строка должна работать.

Передача сообщений назад (в предыдущие VC) может работать одинаково, но начинает запутываться. Вы можете запрограммировать шаг назад через стек VC, чтобы найти конкретный (экземпляр) VC. Один из ответов на получение UIViewController из UIView? дает пример кода для перехода через контроллеры просмотра.

Но если его простое прямое сообщение, передача сообщений или информации через

  • (void) prepareForSegue: (UIStoryboardSegue *) segue отправитель: (id) отправитель

в нижней части кода VC и прокомментированные строки ниже очень легко и безопасно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню