TableView с переходами в несколько представлений - PullRequest
0 голосов
/ 10 октября 2018

Я новичок в разработке для iOS.Я надеюсь получить помощь и также извиниться, если мой вопрос слишком прост.Я просто привыкаю к ​​UITableViewController и Delegate, DataSource.

У меня есть FirstViewController как на фотографии enter image description here

Когда пользователь касается внутриsegmentedController TableViewCell будет перезагружать данные, чтобы показать, какие фильмы показывают и готовятся к просмотру (просто приложение для бронирования мест в кино для моей учебной цели).

enter image description here

Я вижу проблему с переходами к нескольким представлениям.
Когда пользователь выбирает ячейку.
Как назначить идентификатор для каждой перезагрузки данных, чтобы при нажатии на ячейку данные передавались другому ViewController (например,: DetailViewUpcoming и DetailViewShowing).Здесь у меня есть два других viewcontroller, чтобы записывать подробную информацию о предстоящих фильмах и показывать кинофильмы (изображение, имя, дата и кнопка реверса .... и т. Д.)

enter image description here

Мне просто нужна помощь с идеями, если это возможно.Или описание кода очень хорошее.Хотя я пытался реализовать функцию segue в функции: tableview (_tableView: UITableView, didSelectRowAt indexPath: IndexPath), но моя программа не была выполнена должным образом.Потому что у меня проблемы с segmentedControll (я думаю, проблема здесь)

Я прочитал эту запись до

Спасибо за все

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Я предполагаю следующее для вашего вопроса:

  1. У вас есть массив строк для заполнения вашего tableView
  2. Вам просто нужно пройти что String до следующего View Controller

Теперь, перед отправкой данных (или строки) в следующий View Controller, необходимо проверить 2 значения

  1. Какая опция Segmented Control была выбрана, когда пользователь выбрал ячейку.

  2. Index Path выбранной ячейки


SourceViewController.swift

var upcomingMovies = ["A","B","C"]
var nowShowingMovies = ["D","E","F"]

func tableView(_ tableView:UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

  guard let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell") as? TableViewCell else { return UITableViewCell() }

  switch segmentedControl.selectedSegmentIndex {

     case 0:
        cell.textLabel.text = upcomingMovies[indexPath.row]

     case 1:
        cell.textLabel.text = nowShowingMovies[indexPath.row]

     default:
        break
    }

    return cell  
 }

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

       switch segmentedControl.selectedSegmentIndex {

        case 0: //We check the *first* value here
          let destinationVCObject = self.storyboard?.instantiateViewController(withIdentifier: "destinationVC") as! DestinationViewController

          //We check the *second* value here
          destinationVCObject. movieName = upcomingMovies[indexPath.row] 

          self.navigationController?.pushViewController(destinationVCObject, animated: true)

        case 1: //We check the *first* value here
          let destinationVCObject = self.storyboard?.instantiateViewController(withIdentifier: "destinationVC") as! DestinationViewController

          //We check the *second* value here
          destinationVCObject. movieName = nowShowingMovies[indexPath.row] 

          self.navigationController?.pushViewController(destinationVCObject, animated: true)

        default:
           break

     }
  }


@IBAction func segmentedTapped(_ sender: Any) {
    myTableView.reloadData()
}

DestinationViewController.swift

class DestinationViewController:UIViewController {

@IBOutlet weak var movieNameLabel:UILabel!

var movieName:String?

override func viewDidLoad() {
    super.viewDidLoad()

    movieNameLabel.text = movieName
   }
}
0 голосов
/ 11 октября 2018

Я решил проблему с segue с помощью двух функций:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "segueIdentifier1" {
            if let indexPath = tableView.indexPathForSelectedRow {
                let destinationController = segue.destination as! UpComingDetailView
                destinationController.moVieName = ArrayOfUpcomingMovieList[indexPath.row]
            }
        }
        else if segue.identifier == "segueIdentifier2" {
            if let indexPath = tableView.indexPathForSelectedRow {
                let destinationController = segue.destination as! NowShowingDetail
                destinationController.moVieName = ArrayOfNowShowingMoVieList[indexPath.row]
            }
        }
    }

On didSelectRow

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        switch segment.selectedSegmentIndex {
        case 0:
            performSegue(withIdentifier: "segueIdentifier1", sender: indexPath)
            print("segue to DetailViewController1")
        case 1:
            performSegue(withIdentifier: "segueIdentifier1", sender: indexPath)
            print("segue to DetailViewController2")
        default:
            break
        }
    }
0 голосов
/ 10 октября 2018

Логика, которую вам нужно реализовать:

  1. Проверьте segmentedIndex, чтобы узнать, хочет ли пользователь увидеть «Предстоящие» или «Показ».
  2. Загрузка tableView с фильмами за шаг1.
  3. Когда пользователь нажимает на ячейку, используйте segmentedIndex, чтобы определить, был ли выбран фильм из массива «Предстоящий» или «Показ».
  4. Получить идентификатор этого фильма иотправьте его в соответствующий DetailsViewController.Теперь, когда у вас есть movieID, используйте его для запроса деталей фильма из вашей базы данных.

    func tableView(_ tableView:UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell") as? TableViewCell else { return UITableViewCell() }
    
    switch segmentedControl.selectedSegmentIndex {
    case 0:
        //handle the set up of Upcoming cells
    
    case 1:
       //handle the setup of Showing cells
    
    default:
        break
    }
    return cell  
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
    switch segmentedControl.selectedSegmentIndex {
    
    case 0:
        let DetailViewUpcoming = self.storyboard?.instantiateViewController(withIdentifier: "DetailViewUpcoming") as! DetailViewUpcoming
    
        DetailViewUpcoming.init(forMovie: upcomingArray[indexPath.row].movieID)
        self.navigationController?.pushViewController(DetailViewUpcoming, animated: true)
    
    
    
    case 1:
        let DetailViewShowing = self.storyboard?.instantiateViewController(withIdentifier: "DetailViewShowing") as! DetailViewShowing
    
        DetailViewShowing.init(forMovie: showingArray[indexPath.row].movieID)
        self.navigationController?.pushViewController(DetailViewShowing, animated: true)
    
    
    default:
        break
    
    }
    }
    
    
    @IBAction func segmentedTapped(_ sender: Any) {
    tableView.reloadData()
    }
    

Внутри DetailViewUpcoming и DetailViewShowing объявите переменную для movieID и добавьте инициализатор

var movieID: String?

init(movieID:String){
 self.movieID = movieID
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...