Как создать backBarButtomItem с пользовательским представлением для UINavigationController

Вы можете достичь этого, добавив фильтр bool/must_not, содержащий фильтр ids с массивом идентификаторов, которые вы не хотите отображать, например:

{
  "query": {
    "bool": {
      "must": [
         ...                    <--- your other filters go here
      ],
      "must_not": [
        {
          "ids": {
            "values": [
              "id1", "id2"      <--- add all the ids you DON'T want in here
            ]
          }
        }
      ]
    }
  }
}
35
задан Chris Hanson 11 February 2009 в 11:41
поделиться

4 ответа

Я вполне уверен, что эти backBarButtonItem свойство только для чтения. Вместо того, чтобы изменить эти backBarButtonItem, попытайтесь установить пользовательское leftBarButtonItem и скройтесь backBarButtonItem:

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Prout" style:UIBarButtonItemStyleDone target:nil action:nil] autorelease];
self.navigationItem.hidesBackButton = YES;

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

19
ответ дан Travis 10 October 2019 в 11:49
поделиться

Я готов поспорить, что это ошибка со стороны Apple, поскольку я сталкиваюсь с той же проблемой. Причина в том, что я могу получить настраиваемый UIBarButtonItem , но только когда я не пытаюсь использовать метод initWithCustomView: . Согласно API, контроллер навигации проверяет следующие вещи, когда нажимается новый контроллер представления:

  1. Если новый контроллер представления верхнего уровня имеет настраиваемый элемент кнопки левой панели, этот элемент отображается. Чтобы указать настраиваемый элемент кнопки левой панели, установите свойство leftBarButtonItem элемента навигации контроллера представления.
  2. Если контроллер представления верхнего уровня не имеет настраиваемого элемента кнопки левой панели, но элемент навигации предыдущего контроллера представления имеет допустимый элемент в свойстве backBarButtonItem, панель навигации отображает этот элемент.
  3. Если элемент настраиваемой кнопки панели не указан ни одним из контроллеров представления, используется кнопка возврата по умолчанию, а ее заголовок устанавливается равным значению свойства title предыдущего контроллера представления - то есть контроллер представления на один уровень ниже в стеке. (Если в стеке навигации есть только один контроллер представления, кнопка возврата не отображается.)

В моем случае (как и в вашем) 2. Я указываю код точно , такой же, как у вас (т.е. , создание UIButton , установка его свойств image для различных состояний, создание UIBarButtonItem , инициализация его с помощью UIButton , затем установка my свойство backBarButtonItem контроллера текущего представления в UIBarButtonItem ); тем не мение, когда я позже нажимаю на контроллер представления, в левой части контроллера навигации ничего не отображается. Как ни странно, я могу щелкнуть там, где должна быть кнопка «Назад», и отобразится контроллер представления.

Интересно, что если я создаю UIBarButtonItem с помощью initWithTitle: style: target: action: вместо метода initWithCustomView: , он показывает настраиваемую кнопку с настраиваемым заголовком. Кроме того, как упоминал Трэвис, использование свойства leftBarButtonItem вместо этого работает нормально. Однако я бы предпочел придерживаться санкционированной логики, указав кнопку «Назад» для текущего контроллера представления - чтобы она отображалась позже при нажатии нового контроллера представления - вместо создания левой кнопки для следующего контроллера представления. , который, возможно, он не должен беспокоиться ни о чем, относящемся к предшествующему контроллеру представления. : - \

6
ответ дан 27 November 2019 в 06:41
поделиться

Backbarbuttonitem не только для чтения имущество. Я не уверен, почему это ведет себя так странно, и вышеизложенное является действительным (если менее идеальный) обходной путь.

Это ведет себя странно, потому что установка Backbarbuttonitem VC не меняет ничего о появлении навигационного элемента VC - вместо этого он меняет кнопку, которая указывает обратно в VC. См. Обновление навигационной панели от Apple FMI.

Это сказало, что у меня не было много повезло, чтобы работать на себя. Если вы посмотрите на этот сайт, вы найдете несколько потоков, которые предлагают размещение кода, очень похожи на то, что у вас уже есть непосредственно перед вызовом, чтобы нажать новый вид на стек. Мне повезло там, но, к сожалению, не когда дело доходит до использования пользовательского изображения.

1
ответ дан 27 November 2019 в 06:41
поделиться

Хотя на этот вопрос уже ответили, у меня сработало:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backArrow.png"] style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];

BTW: даже в iOS4 инициализация кнопки "назад" с помощью initWithCustomView: у меня не сработала. ;(

2
ответ дан 27 November 2019 в 06:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: