2015-05-02 3 views
8

Предположим, что у меня есть ViewControllerA, что указывает на ViewControllerB, я могу установить заголовок кнопки Назад в ViewControllerB через это в ViewControllerA:backBarButtonItem изображение в прошивкой 8

navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil) //set title to blank 
navigationController?.pushViewController(destinationVC, animated: true) 

Однако, как я могу заменить изображение? Я попробовал это, но я до сих пор вижу только по умолчанию «Назад» изображения, вместо пользовательского изображения:

navigationItem.backBarButtonItem = UIBarButtonItem(image: UIImage(named: "back-toolbar"), style: UIBarButtonItemStyle.Plain, target: nil, action: nil) 

enter image description here

Я хочу использовать это изображение:

enter image description here

После чтение многих других сообщений SO, я не хочу реализовывать leftButtonItem для каждого целевого вида, такого как ViewControllerB, и должен управлять обратным действием и прокручивать левый жест.

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

UPDATE:

Per @ rounak Совета дня, я был в состоянии установить backBarButton, но позиция кажется неправильной. Любой способ настроить его?

enter image description here

+0

Пожалуйста, объясните фактические результаты, которые вы видите, и как они отличаются от фактических результатов, которые вы хотите. «это не работает» не является достаточным описанием вашей проблемы. Что «не работает»? Это крушение? Скомпилирует ли он? Являются ли их предупреждения или ошибки? Он работает нормально и просто отображает стандартный внешний вид по сравнению с вашим изображением? Запускает ли он ракеты? – nhgrif

+0

К сожалению, я добавил скриншот. – Dean

ответ

16

Вы можете просто установить backIndicatorImage:

navigationController?.navigationBar.backIndicatorImage = UIImage(named: "back") 
navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "back") 

Это будет применяться показатель изображение только для этого контроллера навигации, а не все контроллеры навигации в вашем приложении. Вы можете изменить это изображение внутри своего контроллера вида в viewWillAppear/viewWillDisappear для контроллеров представлений, которым требуется другое обратное изображение.

+0

Спасибо @рунак, что сработало. Есть ли способ настроить размер и положение изображения? Размер и положение кажутся немного неактивными. PS. Хороший совет по его сбросу на 'viewWillDisappear'. – Dean

+0

@Dean iOS обычно неплохо работает при позиционировании кнопки «назад», но если вы обнаружите, что это неудовлетворительно, вы можете попробовать добавить немного поля к изображению, чтобы переместить его в нужную сторону. – rounak

+0

Какой размер изображения я должен создать? iOS не изменяет размер изображения. – Dean

3

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

Вот пример в Objective-C, я уверен, что вы можете легко найти его Swift эквивалент:

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"back-toolbar.png"]]; 
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"back-toolbar.png"]]; 
+0

Привет, Артал, к сожалению, я не могу этого сделать. У меня есть некоторые представления, которые используют одно изображение для кнопки «Назад» и другие представления, которые используют другое изображение. – Dean

+0

@Dean я вижу. Но вы все равно можете использовать этот метод несколько раз и переключать изображение на правильное, прежде чем показывать определенные контроллеры представлений, и изменить его обратно при их увольнении. – Artal

+0

Если вы это сделаете, текст кнопки «Назад» останется там. –

Смежные вопросы