раскрутка перехода не срабатывает

Я учился быстро и сделал основу большей части своего приложения. У меня есть следующая раскадровка

раскадровка приложения

Все работает нормально. Например, у меня есть откат на контроллере представления добавления курса, который срабатывает, когда вы нажимаете кнопку «Сохранить», и вы возвращаетесь к контроллеру представления «ваши курсы».

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

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

Тем не менее, я следовал многим руководствам и, очевидно, работал раньше. (Мой метод действия для перехода к раскрутке находится в правильном контроллере просмотра тем), но когда я нажимаю «Сохранить», переход к раскрутке не возвращает меня к контроллеру просмотра тем.

Может ли кто-нибудь предложить причину этого? Я потратил много времени, пытаясь найти ответ, и прошел множество руководств, но так и не смог его решить.

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

у меня есть следующий код в контроллере просмотра обновлений

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if saveButton === sender {
        print("save button selected")
   }
}

Но даже это не срабатывает, когда я нажимаю сохранить.

Большое спасибо

ОБНОВЛЕНИЕ: После того, как я последовал совету Ronatorys, мой контроллер просмотра для оценки обновления выглядит следующим образом, но он все еще не работает:

импортировать UIKit

класс UpdateScoreTableViewController: UITableViewController {

@IBOutlet weak var topicGettingUpdated: UITextField!
@IBOutlet weak var newScore: UITextField!


@IBOutlet weak var saveButton: UIBarButtonItem!


var index:Int?
var Topics:[String]!


var TopicToUpdate:String?


override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    guard let uiBarButtonItem = sender as? UIBarButtonItem else {
        print("There is no UIBarButtonItem sender")
        return
    }
}


override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if indexPath.section == 0 && indexPath.row == 0 {
        newScore.becomeFirstResponder()
    }
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
}

}

Но подготовка к переходу даже не срабатывает.


person Baz M    schedule 25.10.2016    source источник
comment
Очень трудно помочь вам с этой проблемой без дополнительной информации. Тот факт, что prepareForSegue не срабатывает, просто подтверждает, что переход раскрутки не работает.   -  person Craig Grummitt    schedule 25.10.2016


Ответы (2)


Как сказал Крейг в комментариях, найти проблему не так просто. Поэтому я просто создаю простое приложение, в котором вы можете следовать инструкциям и посмотреть, не забыли ли вы что-то, чтобы правильно настроить функциональность. Надеюсь, это поможет вам. Примечание. Код написан на Swift 3.0, но его легко адаптировать к версии 2.*

<сильный>1. Раскадровка с двумя контроллерами представления:

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

<сильный>2. Объявите метод действия для перехода к раскрутке в FirstViewController.swift:

class FirstViewController: UIViewController {
  // action method for the unwind segue
  @IBAction func updateScore(_ segue: UIStoryboardSegue) {
    print("Back in the FirstViewController")
  } 
}

<сильный>3. Соедините Save button в раскадровке с методом действия (с помощью Ctrl + перетаскивание):

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

<сильный>4. Соедините свой Save button с файлом SecondViewController.swift, чтобы использовать его для проверки вашего метода prepareSegue (с помощью Ctrl + перетаскивание):

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

<сильный>5. Добавьте метод prepare(for:sender:) в свой SecondViewController.swift:

class SecondViewController: UIViewController {

  @IBOutlet weak var saveButtonPressed: UIBarButtonItem!

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // check safely with guard that your save button is the sender and you can use it
    // if not print message
    guard let uiBarButtonItem = sender as? UIBarButtonItem else {
      print("There is no UIBarButtonItem sender")
      return
    }

    // check if you selected the save button
    if saveButtonPressed == uiBarButtonItem {
      print("save button selected")
    }
  }
}

Результат:

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

Пример приложения можно найти здесь

person ronatory    schedule 25.10.2016
comment
Привет, Ronatory, Большое спасибо за это, но это не сработало. Я пытался выполнить все ваши шаги, но все равно ничего не происходит, когда я нажимаю сохранить. Подготовка к переходу даже не запускается, и в консоли не отображается отправитель UIBarButtonItem. Я думал, может быть, я чего-то не понимаю в навигационных контроллерах. Итак, я удалил навигационный контроллер, в который была встроена оценка обновления, и все работает нормально, и я понимаю это, т. Е. Я могу перемещаться назад по стеку. Именно в этот момент я не могу заставить эту кнопку сохранения работать. - person Baz M; 27.10.2016

Мне не удалось заставить работать раскрутку, но вместо этого я использовал

navigationController!.popViewControllerAnimated(true)

как обходной путь, и это работает нормально.

person Baz M    schedule 13.11.2016