Створення кнопки зі стрілкою вліво (на зразок стилю «назад» UINavigationBar) на панелі UITool


290

Я хотів би створити "назад" кнопку лівої стрілки-панелі в UIToolbar.

Наскільки я можу сказати, єдиний спосіб отримати одне з них - це залишити UINavigationControllerза замовчуванням налаштування, і він використовує один для лівого елемента рядка. Але я не можу знайти його створити як a UIBarButtonItem, тому я не можу зробити його в стандартному UIToolbar, хоча вони дуже схожі на UINavigationBars.

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

Будь-які ідеї поза скріншотом для кожного розміру та кольорової гами, які я маю намір використати?

Оновлення: ЛОСКАЙТЕ СТОПУВАТИ ухилення від питання і підказуючи, що я не повинен ставити це питання і повинен використовувати UINavigationBar. Моя програма - Instapaper Pro. Він показує лише нижню панель інструментів (щоб заощадити простір та максимально збільшити площу вмісту), і я хочу покласти внизу ліву кнопку зі стрілкою у формі стрілки.

Сказання мені, що мені не потрібно цього робити, - це не відповідь і, безумовно, не заслуговує щедрості.



Відповіді:


130

Я використав наступний psd, який я отримав із http://www.teehanlax.com/blog/?p=447

http://www.chrisandtennille.com/pictures/backbutton.psd

Тоді я просто створив користувацький UIView, який використовую у властивості customView елемента панелі інструментів.

Добре працює для мене.


Редагувати: Як вказував PrairieHippo , maralbjo встановив, що, використовуючи наведений нижче, простий код зробив трюк (вимагає спеціального зображення в комплекті), слід поєднувати цю відповідь. Отже, ось додатковий код:

// Creates a back button instead of default behaviour (displaying title of previous screen)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow.png"]
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(backAction)];

tipsDetailViewController.navigationItem.leftBarButtonItem = backButton;
[backButton release];

1
PSD, який я завантажив, призначений для чорної панелі інструментів. Я не намагався багато з блакитними, оскільки моя програма не використовує цього. Але, наскільки я знаю, панель інструментів не перефарбує її в міру необхідності. Крис.
PyjamaSam

1
Вам не потрібен якийсь спеціальний інструмент для його перефарбовування, я зробив це за допомогою опції "Налаштувати колір" Mac Preview.
Сушант

1
Чи можна про це рішення трохи прописати?
cannyboy

4
Цей psd корисний лише для масштабу екрана 1,0f. На екрані сітківки це буде виглядати жахливо.
Даніель Вуд

3
Не використовуйте для цього зображення, просто робіть це належним чином (див. Відповідь для stackoverflow.com/questions/4260238 ).
ingh.am

45

Метод Unicode

Я думаю, що набагато простіше просто використовувати символ Unicode, щоб виконати роботу. Ви можете переглядати стрілки, гуглюючи або трикутники Unicode, або стрілки Unicode . Починаючи з iOS6, Apple змінила персонаж на символ смайлика з облямівкою. Для відключення кордону я додаю селектор варіантів варіації Unicode 0xFE0E .

NSString *backArrowString = @"\U000025C0\U0000FE0E"; //BLACK LEFT-POINTING TRIANGLE PLUS VARIATION SELECTOR

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:backArrowString style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.leftButtonItem = backBarButtonItem;

Блок коду призначений лише для демонстрації. Він буде працювати в будь-якій кнопці, яка приймає NSString.

Повний список символів шукайте в Google символи Unicode та те, що ви хочете. Ось запис для Чорного лівого вказуючого трикутника .

Результат

Результат


37

ПОПЕРЕДЖЕННЯ. Існують повідомлення про те, що це не працюватиме на iOS 6. Це може працювати лише на старих версіях ОС. Очевидно, що принаймні один розробник відхилив їх додаток за використання цього фокусу (див. Коментарі). Використовуйте на свій страх і ризик. Використання зображення (див. Відповідь вище) може бути безпечнішим рішенням.

Це можна зробити без додавання власних файлів зображень за допомогою кнопки sekr1t типу 101, щоб отримати правильну форму. Для мене фокусом було з'ясування того, що я міг би використати initWithCustomViewдля створення BarButtonItem. Мені особисто це було потрібно для динамічного навібара, а не для toolbar, але я протестував його за допомогою панелі інструментів, і код майже той самий:

// create button
UIButton* backButton = [UIButton buttonWithType:101]; // left-pointing shape!
[backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Back" forState:UIControlStateNormal];

// create button item -- possible because UIButton subclasses UIView!
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];

// add to toolbar, or to a navbar (you should only have one of these!)
[toolbar setItems:[NSArray arrayWithObject:backItem]];
navItem.leftBarButtonItem = backItem;

Якщо ви робите це на панелі інструментів, вам доведеться налаштувати, як ви встановлюєте елементи, але це залежить від решти коду, і я залишаю це як вправу для читача. : P Цей зразок працював для мене (компілювався та запускався).

Бла-бла, читайте HIG, не використовуйте недокументовані функції та інше. Існує лише шість підтримуваних типів кнопок, і це не одна з них.


1
Тип кнопки 101, схоже, не надає мені лівої вказівної форми ... просто прямокутник.
elsurudo

10
Не робіть цього - Ваш додаток буде відхилено. Проголосуйте цю відповідь вниз.
thefaj

4
Я схильний думати, що він не впевнений; він говорить "не використовувати незадокументований API", але не заявив, що його додаток було відхилено. І це не незадокументований API - це незадокументоване значення. Якщо хто -то вже були їх додаток відхилено, будь ласка , напишіть. Я продовжую отримувати програми, затверджені з цим значенням.
AndrewS

1
@thefaj Я надіслав додаток із цим кодом, і його було схвалено.
Аарон

1
Це дуже поганий стиль кодування. Вам пощастило, але вам слід дотримуватися лише документально підтвердженого API (не магічні / неопубліковані номери).
thefaj

36

введіть тут опис зображення

Перш за все, ви повинні знайти зображення кнопки "назад". Я використав приємний додаток під назвою Extractor, який витягує всю графіку з iPhone. В iOS7 мені вдалося відновити зображення, яке називалося, UINavigationBarBackIndicatorDefaultі воно було в чорному кольорі, оскільки мені потрібен червоний відтінок, я змінюю колір на червоний за допомогою Gimp.

Редагувати:

Як зазначив btate у своєму коментарі, не потрібно змінювати колір за допомогою редактора зображень. Наступний код повинен зробити фокус:

imageView.tint = [UIColor redColor];
imageView.image = [[UIImage imageNamed:@"UINavigationBarBackIndicatorDefault"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

Тоді я створив подання, яке містить imageView із цією стрілкою, мітку зі спеціальним текстом, а зверху на перегляд у мене є кнопка з дією. Потім я додав просту анімацію (завмирання та переклад).

Наступний код імітує поведінку кнопки "назад", включаючи анімацію.

-(void)viewWillAppear:(BOOL)animated{
        UIImageView *imageView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"UINavigationBarBackIndicatorDefault"]];
        [imageView setTintColor:[UIColor redColor]];
        UILabel *label=[[UILabel alloc] init];
        [label setTextColor:[UIColor redColor]];
        [label setText:@"Blog"];
        [label sizeToFit];

        int space=6;
        label.frame=CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+space, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
        UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, label.frame.size.width+imageView.frame.size.width+space, imageView.frame.size.height)];

        view.bounds=CGRectMake(view.bounds.origin.x+8, view.bounds.origin.y-1, view.bounds.size.width, view.bounds.size.height);
        [view addSubview:imageView];
        [view addSubview:label];

        UIButton *button=[[UIButton alloc] initWithFrame:view.frame];
        [button addTarget:self action:@selector(handleBack:) forControlEvents:UIControlEventTouchUpInside];
        [view addSubview:button];

        [UIView animateWithDuration:0.33 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
            label.alpha = 0.0;
            CGRect orig=label.frame;
            label.frame=CGRectMake(label.frame.origin.x+25, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
            label.alpha = 1.0;
            label.frame=orig;
        } completion:nil];

        UIBarButtonItem *backButton =[[UIBarButtonItem alloc] initWithCustomView:view];
}

- (void) handleBack:(id)sender{
}

Редагувати:

Замість додавання кнопки, на мою думку, кращим підходом є використання розпізнавача жестів.

UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleBack:)];
[view addGestureRecognizer:tap];
[view setUserInteractionEnabled:YES];

1
Привіт Алекс, дякую за рішення. Одне питання, з яким я стикаюсь з цим реалізованим рішенням, полягає в тому, що: область потрапляння менше означає, коли я натискаю на стрілку, що ручкаBack не отримує дзвінок, але коли я натискаю на текстовий handleBack отримати дзвінок. Просимо запропонувати з цього приводу. Дякую
Йогеш Лолусаре

Спробуйте скористатися UITapGestureRecognizer, я редагував питання
Олексій

Напевно, ви також можете спробувати збільшити розмір перегляду.
Олексій

2
Чорний колір на цій кнопці робить його шаблоном. Вам не потрібно використовувати gimp, щоб змінити його. Просто використовуйте режим відтінку imageView.tint = [UIColor redColor]та шаблону на зображенні. imageView.image = [yourImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
куріння устриця

18

Я не впевнений, чи не вдасться це зробити, але ви можете спробувати створити UINavigationControllerналаштування за замовчуванням для створення кнопки, знайти кнопку в ієрархії підвідного контролера, зателефонувати removeFromSuperviewна неї, знищити контролер навігації, а потім додати кнопку як підвід панелі інструментів. Можливо, вам також знадобиться retainі кнопка перед викликом removeFromSuperview(а потім releaseпісля додавання її як підвід на панель інструментів), щоб уникнути її розміщення під час процесу.


14

Щоб зробити UIButton зі стрілкою досить близько (я не дизайнер;) до стрілки назад iOS 7:

Стандарт:

Стандартна стрілка системи назад

Apple SD Gothic Neo

Apple SD Gothic Neo <символ

У Xcode:

  • Зосередьтеся на полі значення заголовка кнопки (або будь-який інший вид / елемент керування текстовим вмістом)
  • Відкрийте Правка -> Спеціальні символи
  • Виберіть групу «Параметри» та двічі клацніть символ «<»
  • Змініть шрифт на: Apple SD Gothic Neo, звичайний із потрібним розміром (наприклад, 20)
  • Змініть колір, як вам подобається

Відповідь Ref @ staticVoidMan на стрілку, схожу на "Назад" на iOS 7


8

стрілка назад

Якщо ви не хочете турбуватися з файлами зображень, форму стрілки можна намалювати в підкласі UIView із наступним кодом:

- (void)drawRect:(CGRect)rect {
    float width = rect.size.width;
    float height = rect.size.height;
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextBeginPath(context);
    CGContextMoveToPoint(context, width * 5.0/6.0, height * 0.0/10.0);
    CGContextAddLineToPoint(context, width * 0.0/6.0, height * 5.0/10.0);
    CGContextAddLineToPoint(context, width * 5.0/6.0, height * 10.0/10.0);
    CGContextAddLineToPoint(context, width * 6.0/6.0, height * 9.0/10.0);
    CGContextAddLineToPoint(context, width * 2.0/6.0, height * 5.0/10.0);
    CGContextAddLineToPoint(context, width * 6.0/6.0, height * 1.0/10.0);
    CGContextClosePath(context);

    CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextFillPath(context);
}

де вигляд стрілки пропорційний ширині 6,0 та висоті 10,0


7
    self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;

Працює для мене. Я використовував це, коли у мене було більше вкладок, то міг поміститися на панелі вкладок, і контролер перегляду, натиснутий з пункту «Більше», переоцінив leftBarButtonItem у його viewDidLoad.


4

Ви можете знайти вихідні зображення, витягнувши їх з Other.artwork в UIKit $ {SDKROOT} /System/Library/Frameworks/UIKit.framework/Other.artwork. Моддінг співтовариство має деякі інструменти для їх вилучення, тут . Після вилучення зображення ви можете написати якийсь код, щоб відкоригувати його за необхідності та встановити його як зображення кнопки. Незалежно від того, чи дійсно ви можете надіслати таку річ (оскільки ви вкладаєте одержані твори мистецтва), це може бути трохи непросто, тому, можливо, ви хочете поговорити з юристом.


4

У бібліотеці Three20 є спосіб зробити це:

  UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle: @"Title" style:UIBarButtonItemStylePlain 
                                                                target:self action:@selector(foo)];

  UIColor* darkBlue = RGBCOLOR(109, 132, 162);

  TTShapeStyle* style = [TTShapeStyle styleWithShape:[TTRoundedLeftArrowShape shapeWithRadius:4.5] next:
    [TTShadowStyle styleWithColor:RGBCOLOR(255,255,255) blur:1 offset:CGSizeMake(0, 1) next:
    [TTReflectiveFillStyle styleWithColor:darkBlue next:
    [TTBevelBorderStyle styleWithHighlight:[darkBlue shadow]
                                     shadow:[darkBlue multiplyHue:1 saturation:0.5 value:0.5]
                                      width:1 lightSource:270 next:
    [TTInsetStyle styleWithInset:UIEdgeInsetsMake(0, -1, 0, -1) next:
    [TTBevelBorderStyle styleWithHighlight:nil shadow:RGBACOLOR(0,0,0,0.15)
                                        width:1 lightSource:270 next:nil]]]]]];

  TTView* view = [[[TTView alloc] initWithFrame:CGRectMake(0, 0, 80, 35)] autorelease];
  view.backgroundColor = [UIColor clearColor];
  view.style = style;
  backButton.customView = view;


  self.navigationItem.leftBarButtonItem = backButton;

Чи можете ви опублікувати скріншот кінцевого результату?
джм.

1
це виглядало жахливо. Ніколи не потрапляла ліва кнопка стрілки назад, щоб виглядати цілком правильно. Я здався і застосував належну кнопку назад із навігатором Three20.
Ендрю Стріла

4

Я виявив, що за допомогою наведеного нижче простого коду було зроблено трюк (потрібне зображення у пакеті)

// Creates a back button instead of default behaviour (displaying title of previous screen)
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow.png"]
                                                                   style:UIBarButtonItemStyleBordered
                                                                  target:self
                                                                  action:@selector(backAction)];

    tipsDetailViewController.navigationItem.leftBarButtonItem = backButton;
    [backButton release];

2
Для всіх, хто заходить на цю сторінку, поєднайте цю відповідь з відповіддю @ PyjamaSam.
PrairieHippo

@PrairieHippo: вже зроблено. Мабуть, мабуть, це було відредаговано в першу чергу. Ідеально -1 для того, щоб не робити цього, в першу чергу залишаючи роботу іншим.
хакре

4

Ось що я в кінцевому підсумку робив після пошуку всіх цих рішень та інших. Він використовує розтягуваний png, витягнутий із стокових зображень UIKit. Таким чином ви можете встановити текст на будь-який смак

// Generate the background images
UIImage *stretchableBackButton = [[UIImage imageNamed:@"UINavigationBarDefaultBack.png"] stretchableImageWithLeftCapWidth:14 topCapHeight:0];
UIImage *stretchableBackButtonPressed = [[UIImage imageNamed:@"UINavigationBarDefaultBackPressed.png"] stretchableImageWithLeftCapWidth:13 topCapHeight:0];
// Setup the UIButton
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setBackgroundImage:stretchableBackButton forState:UIControlStateNormal];
[backButton setBackgroundImage:stretchableBackButtonPressed forState:UIControlStateSelected];
NSString *buttonTitle = NSLocalizedString(@"Back", @"Back");
[backButton setTitle:buttonTitle forState:UIControlStateNormal];
[backButton setTitle:buttonTitle forState:UIControlStateSelected];
backButton.titleEdgeInsets = UIEdgeInsetsMake(0, 5, 2, 1); // Tweak the text position
NSInteger width = ([backButton.titleLabel.text sizeWithFont:backButton.titleLabel.font].width + backButton.titleEdgeInsets.right +backButton.titleEdgeInsets.left);
[backButton setFrame:CGRectMake(0, 0, width, 29)];
backButton.titleLabel.font = [UIFont boldSystemFontOfSize:13.0f];
[backButton addTarget:self action:@selector(yourSelector:) forControlEvents:UIControlEventTouchDown];
// Now add the button as a custom UIBarButtonItem
UIBarButtonItem *backButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:backButton] autorelease];
self.navigationItem.leftBarButtonItem = backButtonItem;

2
Якщо слід використовувати UIControlStateHighlight not UIControlStateSelected, інакше зображення змінюється під час натискання кнопки.
Джим

4

Робити з Interface Builder в Xcode 5.x це легко

Результат

  • використовувати елемент панелі інструментів та кнопки панелі з бібліотеки об'єктів

    Компоненти

  • в батон атрибути інспектора редагування зображень розділ з вашої кнопкою заднього зображенням

    Атрибути інспектора

Готово!


2

Я намагався зробити те ж саме, але хотів, щоб кнопка "Назад" була у навігаційній панелі. (Насправді мені потрібна була кнопка "назад", це означало б більше, ніж лише повернення назад, тому мені довелося використовувати властивість leftBarButtonItem). Я спробував те, що запропонував AndrewS, але на навігаційній панелі він виглядатиме не так, як слід, оскільки UIButton був начебто закинутий на UIBarButtonItem.

Але я знайшов спосіб обійти це. Я фактично просто поставив UIView під UIButton і встановив customView для UIBarButtonItem. Ось код, якщо комусь це потрібно:

// initialize button and button view
UIButton *backButton = [UIButton buttonWithType:101];
UIView *backButtonView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, backButton.frame.size.width, backButton.frame.size.height)];

[backButton addTarget:self action:@selector(backButtonTouched:) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Back" forState:UIControlStateNormal];
[backButtonView addSubview:backButton];

// set buttonview as custom view for bar button item
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButtonView];
self.navigationItem.leftBarButtonItem = backButtonItem;

// push item to navigationbar items
[self.navigationController.navigationBar setItems:[NSArray arrayWithObject:backButtonItem]];

1

Щоб створити зображення для панелі UITool, зробіть png у фотошопі, і де б не було жодного кольору, він додає його білим, а там, де це альфа = 0, він залишає його в спокої.

Пакет SDK фактично поставив межу навколо зробленої вами піктограми і стає білим, без цього вам нічого робити.

Дивіться, ось що я зробив у Photoshop для своєї кнопки вперед (очевидно, поміняйте її на кнопку назад):

http://twitpic.com/1oanv

і ось це з'явилося як у Interface Builder

http://twitpic.com/1oaoa


1

Рішення БЕЗ використання PNG. Виходячи з цієї відповіді ТА : Додавання стрілки в праву частину комірки в осередку iPhone TableView

Просто переверніть UITableViewCell по горизонталі!

UIButton *btnBack = [[UIButton alloc] initWithFrame:CGRectMake(0, 5, 70, 20)];

// Add the disclosure
CGRect frm;
UITableViewCell *disclosure = [[UITableViewCell alloc] init];
disclosure.transform = CGAffineTransformScale(CGAffineTransformIdentity, -1, 1);
frm = self.btnBack.bounds;
disclosure.frame = CGRectMake(frm.origin.x, frm.origin.y, frm.size.width-25, frm.size.height);
disclosure.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
disclosure.userInteractionEnabled = NO;
[self.btnBack addSubview:disclosure];

// Add the label
UILabel *lbl = [[UILabel alloc] init];
frm = CGRectOffset(self.btnBack.bounds, 15, 0);
lbl.frame = frm;
lbl.textAlignment = NSTextAlignmentCenter;
lbl.text = @"BACK";
[self addSubview:lbl];

1

Швидкий 5.2 Xcode 11.4

Apple Symbol chevron.left тепер дозволяє більш елегантне рішення зробити власну кнопку. Я максимально наблизився до розміру та інтервалу.

введіть тут опис зображення

import UIKit

class CustomBackButton: UIBarButtonItem {

    convenience init(target: Any, selector: Selector) {

        // Create UIButton
        let button = UIButton(frame: .zero)

        // Customise Title
        button.setTitle("Back", for: .normal)
        button.setTitleColor(.systemBlue, for: .normal)
        button.titleLabel?.font = UIFont.systemFont(ofSize: 17)

        // Customise Image
        let config = UIImage.SymbolConfiguration(pointSize: 19.0, weight: .semibold, scale: .large)
        let image = UIImage(systemName: "chevron.left", withConfiguration: config)
        button.setImage(image, for: .normal)

        // Add Target
        button.addTarget(target, action: selector, for: .touchUpInside)

        // Customise Spacing to match system Back button
        button.imageEdgeInsets = UIEdgeInsets(top: 0.0, left: -18.0, bottom: 0.0, right: 0.0)
        button.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: -12.0, bottom: 0.0, right: 0.0)

        self.init(customView: button)
    }
}

Це може бути реалізовано або як UIToolbarItem, або якUINavigationItem

override func viewDidLoad() {
    super.viewDidLoad()

    // UIToolbar Item
    let barBackButton = CustomBackButton(target: self, selector: #selector(backButtonTapped))
    let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    navigationController?.setToolbarHidden(false, animated: false)
    toolbarItems = [barBackButton, flexSpace]

    // Navigation Item
    let navBackButton = CustomBackButton(target: self, selector: #selector(backButtonTapped))
    navigationItem.leftBarButtonItem = navBackButton
}

@objc func backButtonTapped() {
    print("Back tapped")
}

Якщо ви хочете перевернути кнопку і стрілка вказує праворуч:

введіть тут опис зображення

Використовуйте Apple Symbol під назвою "chevron.right"

Додайте наступний код до CustomBackButtonкласу:

    // Put the image of the right side of the button
    button.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
    button.titleLabel?.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
    button.imageView?.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)

0

Якщо ви хочете уникнути малювання самостійно, ви можете використовувати незадокументований клас: UINavigationButton зі стилем 1. Це, звичайно, може зупинити затвердження вашої програми ... / Джон


0

Ну, вам не потрібно мати різну кнопку для кожного розміру, яку ви можете використовувати [UIImage stretchableImageWithLeftCapWidth:topCapHeight:], але єдине, що я знайшов - це власні зображення.


0

У мене була подібна проблема, і вийшла одна бібліотека PButton . І зразок - це кнопка задньої навігації, як кнопка, яка може бути використана в будь-якому місці, як і спеціальна кнопка.

Щось на зразок цього: введіть тут опис зображення


0

Приклад у Swift 3, з попередньою та наступною кнопкою у верхньому правому куті.

let prevButtonItem = UIBarButtonItem(title: "\u{25C0}", style: .plain, target: self, action: #selector(prevButtonTapped))
let nextButtonItem = UIBarButtonItem(title: "\u{25B6}", style: .plain, target: self, action: #selector(nextButtonTapped))
self.navigationItem.rightBarButtonItems = [nextButtonItem, prevButtonItem]

0

Швидкий

// create button
    var backButton = UIButton(type: 101)

    // left-pointing shape!
    backButton.addTarget(self, action: #selector(self.backAction), for: .touchUpInside)
    backButton.setTitle("Back", for: .normal)

    // create button item -- possible because UIButton subclasses UIView!
    var backItem = UIBarButtonItem(customView: backButton)

    // add to toolbar, or to a navbar (you should only have one of these!)
    toolbar.items = [backItem]
    navItem.leftBarButtonItem = backItem

-5

Спробуйте це. Я впевнений, що вам не потрібно зображення задньої кнопки, щоб створити таке.

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(yourSelectorGoesHere:)];
self.navigationItem.backBarButtonItem = backButton;

Це все, що вам потрібно зробити :)


-23

Чому ви це робите? Якщо ви хочете щось схоже на панель навігації, використовуйте UINavigationBar.

Панелі інструментів мають специфічний візуальний стиль, пов'язаний з ними. Правила людського інтерфейсу для стану iPhone:

У нижньому краї екрана з’являється панель інструментів і містить кнопки, які виконують дії, пов’язані з об’єктами в поточному вікні.

Потім наводиться кілька візуальних прикладів приблизно квадратних значків без тексту. Я б закликав вас слідувати HIG з цього приводу.


8
Я це знаю, дякую. Однак я вважаю, що призначене для мене використання є доцільним. Чи можете ви бути кориснішими, припускаючи, що я дійсно хочу робити те, про що я просив?
Марко

Якщо ви ставите його вгорі екрана, він використовується неправильно. Порівняйте градієнти та межі між UINavigationBar та UIToolbar, і ви побачите, що вони трохи відрізняються. Ви обов'язково хочете використовувати UINavigationBar у верхній частині екрана.
NilObject

10
Я кладу це на дно.
Марко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.