Как отключить backBarButtonItem? [Дубликат]

Я не сохраняю interface s - самое важное в языке: он чаще всего используется для наследования класса. Но в любом случае они важны! Например (это Java код, но он может просто адаптироваться к C# или многим другим языкам):

interface Convertable<T> {

    T convert();
}

public class NumerableText implements Convertable<Integer> {

    private String text = "";

    public NumerableText() { }

    public NumerableText(String text) {
        this.text = text;
    }

    public String getText() {
        return this.text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public Integer convert() {
        return this.text.hashCode();
    }
}

public class NumerableTextArray implements Convertable<Integer> {

    private String[] textArray = "";

    public NumerableTextArray() { }

    public NumerableTextArray(String[] textArray) {
        this.textArray = textArray;
    }

    public String[] getTextArray() {
        return this.textArray;
    }

    public void setTextArray(String[] text) {
        this.textArray = textArray;
    }

    public Integer convert() {
        Integer value = 0;
        for (String text : textArray)
            value += text.hashCode();
        return value;
    }
}

public class Foo {

    public static void main() {
        Convertable<Integer> num1 = new NumerableText("hello");
        Convertable<Integer> num2 = new NumerableTextArray(new String[] { "test n°1", "test n°2" });
        System.out.println(String.valueOf(num1.convert()));
        System.out.println(String.valueOf(num2.convert()));
        //Here are you two numbers generated from two classes of different type, but both with the method convert(), which allows you to get that number.
    }
}
22
задан Deny 14 August 2015 в 14:14
поделиться

3 ответа

Добавьте код в свой класс ViewController2.swift.

override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.hidesBackButton = true;
    }

Он скроет вашу кнопку назад.

4
ответ дан BKjadav 22 August 2018 в 08:19
поделиться
  • 1
    Я не хочу скрыть это, я обновил свой вопрос. – Deny 14 August 2015 в 12:56
  • 2
    Я попробовал все возможные варианты, но не удалось отключить кнопку «Назад», посмотрите ссылку stackoverflow.com/questions/25362050/… , либо вам нужно создать пользовательскую кнопку возврата. – BKjadav 14 August 2015 в 13:11

На сегодняшний день невозможно отключить кнопку «Назад», используя свойство enabled. Свойство backBarButtonItem будет nil, если вы не создадите пользовательский элемент, и даже тогда он будет игнорировать свойство enabled. Есть пара (неудовлетворительных) способов обойти это.

Скрыть кнопку

Это то, что Apple хочет, чтобы вы делали это, игнорируя свойство enabled. Это также просто

navigationItem.hidesBackButton = true  

и должно быть предпочтительным подходом, если у вас нет веских причин.

Отключить и отточить навигационную панель

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

navigationController?.navigationBar.userInteractionEnabled = false
navigationController?.navigationBar.tintColor = UIColor.lightGrayColor()

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

Использовать элемент пользовательской левой панели.

leftBarButtonItem не игнорирует свойство enabled, поэтому вы может создать пользовательский элемент и вызвать поп вручную, когда он будет активирован.

navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(ThisClass.backButtonTapped))
...
navigationItem.leftBarButtonItem?.enabled = false

func backButtonTapped() {
    self.navigationController?.popViewController(animated: true)
}

Это, однако, не будет иметь стиль кнопки задней панели с ведущим треугольным индикатором.

54
ответ дан Community 22 August 2018 в 08:19
поделиться
  • 1
    Я не хочу потерять по умолчанию задний жест и ведущий треугольный индикатор. Похоже, этого достичь невозможно. Спасибо за длинный ответ. – Deny 14 August 2015 в 14:20
  • 2
    Nav bar userInteractionEnabled = NO, похоже, не работает для меня на iOS 10? У кого-нибудь еще есть эта проблема? – Nate 1 February 2017 в 23:31

Если вы хотите скрыть его, UInavigationItem имеет свойство hidesBackButton.

4
ответ дан Templar 22 August 2018 в 08:19
поделиться