2016-06-17 2 views
0

У меня есть вопрос относительно проекта Swift. У меня есть TableViewController с несколькими ячейками, и когда я нажимаю на них, я перехожу к ViewController, где данные передаются от tableViewController.Перейти к следующей ячейке таблицы с viewcontroller

Я хочу реализовать кнопку в ViewController, которая позволяет мне отображать ViewController с содержимым «следующей ячейки» от контроллера табличного представления. Например, я нажал на вторую ячейку контроллера табличного представления, поэтому перехожу к ViewController, который отображает данные, соответствующие этой ячейке, а затем, когда я нажимаю на эту «следующую» кнопку в viewController, я хочу отображать содержимое 3-й ячейки контроллера таблицы. Как мне это сделать чистым способом?

Вот код, я использую, чтобы передать данные из tableViewController в ViewController:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if let a = articles { 
     return a.count 
    } 
    return 0 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->UITableViewCell{ 
    let cell = tableView.dequeueReusableCellWithIdentifier("ArticleCell", forIndexPath: indexPath) 

    let article = articles?[indexPath.row] 

    if let a = article { 
     cell.textLabel?.text = a.articleName 
     cell.textLabel?.font = UIFont(name: "Avenir", size: 18) 
     cell.textLabel?.numberOfLines = 0 
     if let i = a.tableViewImage { 
      cell.imageView?.image = UIImage(named: i) 
     } 

    } 

    return cell 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "ShowArticle" { 
     let articleVC = segue.destinationViewController as? ArticleViewController 

     guard let cell = sender as? UITableViewCell, 
      let indexPath = tableView.indexPathForCell(cell) else { 
       return 
     } 

     articleVC?.article = articles?[indexPath.row] 
    } 

    } 

В viewController, чтобы показать правильную статью, я написал это в viewDidLoad() (моей viewController показывает веб-представление статья, и у меня есть класс Article где articleLink приходит от):

if let a = article { 
     articleWebView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(a.articleLink, ofType: "html")!))) 
    } 

Я связала nextButton в Main.Storyboard:

@IBOutlet weak var nextButton: UIButton! 

Я относительно новым для Swift, и понятия не имею, как это сделать (моя главная проблема не в том, что я объявляю мои данные в tableViewController, и я не понимаю, как я мог бы остаться в ViewController и «импортировать» данные из tableViewController).

ответ

1

Изменить код TableViewController'sprepareForSegue как этот

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "ShowArticle" { 
     let articleVC = segue.destinationViewController as? ArticleViewController 
     guard let cell = sender as? UITableViewCell, let indexPath = tableView.indexPathForCell(cell) else { 
      return 
     } 
     articleVC?.articles = articles 
     articleVC?.selectedIndex = indexPath.row 
     articleVC?.article = articles?[indexPath.row] 
    } 
} 

Теперь добавьте две глобальные переменные в вашем ViewController, как показано ниже, также изменить ваш следующий кнопку мыши, как этот

var articles: [article]! 
var selectedIndex: Int! 

//Now your button click 
@IBAction func nextButtonClick(sender: UIButton) { 
    if ((self.selectedIndex + 1) < self.articles.count) { 
     self.selectedIndex++ 
     let nextArticle = self.articles[self.selectedIndex] 
     articleWebView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(nextArticle.articleLink, ofType: "html")!))) 
    } 
} 

Я не знаю вас используют NSArray или Array, поэтому создайте объект массива articles так же, как вы создали в TableViewController.

Надеюсь, это вам поможет.

+0

Вы спасатель жизни, спасибо! Это работает как шарм, я просто изменил a.articleLink на nextArticle.articleLink в вашем ответе в nextButtonClick (если кому-то это понадобится в будущем). Спасибо за помощь :) – EdouM

+0

Я одобрил и принял ответ, еще раз спасибо! – EdouM

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