У меня есть простое приложение с двумя экранами, которое я построил год назад, используя шаблон проекта «утилита» в Xcode 3. Это создает делегат приложения, основной вид и вид с обратной стороны.У перевернутого вида вверху есть панель UINavigationBar с левой кнопкой «Готово».
Я только что окончательно обновился до Xcode 4 с SDK 4.3, и когда я сейчас создаю приложение, кнопка «Готово» не появляетсялибо в симуляторе, либо на моем устройстве.Но если я создаю новый проект, используя шаблон «утилиты» Xcode 4, кнопка «Готово» отображается и работает правильно.К сожалению, при обновлении были удалены мои файлы SDK 4.2, поэтому я не могу пересобрать SDK 4.2 и проверить, в чем ли это разница.
Я заметил, что новый шаблон по-разному настраивает основной вид, используя свойство rootViewController.окна, а не добавление основного вида в качестве подпредставления окна ( дополнительная информация здесь ).Я попытался скопировать этот код в делегат своего приложения вместо кода addSubview, но представление вообще не отображалось, поэтому я, должно быть, что-то упустил ... но я все равно скоро поддержу совместимость с iOS 3.0.Я не могу найти никаких других отличий между новым шаблоном «утилиты» и моим собственным проектом на основе старого шаблона.
Я также пытался переместить кнопку «Готово» из leftButtonItem в rightButtonItem в Interface Builder, но этовсе еще не появляется.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
Я пробовал это на всех версиях симулятора iPhone, которые доступны в моей установке XCode.При сборке с SDK 4.3 кнопка «Готово» не отображается в симуляторах iOS 4.0-4.3 ... но она появляется в симуляторе iOS 5 (бета).
Затем я подключил IBOutlets к навигациипанель, элемент навигации и кнопка «Готово» в Интерфейсном Разработчике, чтобы я мог проверить их по своему коду.Когда я проверил их сразу после представления перевернутого вида с помощью presentModalViewController, я обнаружил, что кнопка «Готово» (UIBarButtonItem) существует, но leftBarButtonItem элемента навигации имеет значение null.Если я назначу кнопку «Готово» этому свойству, оно появится.Так что каким-то образом эта кнопка отключается от свойства leftBarButtonItem, когда инициализируется или отображается представление обратной стороны.
ВОЗМОЖНОЕ РЕШЕНИЕ:
В Интерфейсном Разработчике, если я просматриваю выходы для Элемента навигации, я вижучто кнопка Done связана с ее свойством leftBarButtonItem, но если я просматриваю выходы для кнопки Done, у нее нет ссылок.Если я свяжу его с элементом навигации, появится кнопка!При такой настройке кнопка «Готово» показывает элемент навигации в качестве розетки, а элемент навигации дважды показывает кнопку «Готово» в качестве розетки.Это не нужно в новом шаблоне приложения утилиты, поэтому я не знаю, зачем это нужно здесь.Кажется, это работает, но если у кого-то есть объяснение или лучшее решение, я зарезервирую для этого свои очки ответа.