2017-01-15 3 views
0

Итак, я создал приложение, которое загружает новости в ячейки tableView. Теперь я хочу, чтобы пользователь мог открыть отдельную статью. Для этого я передал выбранные ячейки с помощью метода prepareForSegue, и он работает, но частично. Правильно передает заголовок и изображение, но полный текст отображается частично, точнее, он отображается как в ячейках.Текст не прошел полностью после подготовкиForSegue (swift 3)

Вот моя таблица класса новостей:

import Alamofire //Framework for handling http requests 
    import UIKit 
    import AlamofireImage 


    class NewsTableViewController: UITableViewController { 

//Custom struct for the data 
struct News { 
    let title : String 
    let text : String 
    let link : String 
    let imgUrl : String 

    init(dictionary: [String:String]) { 
     self.title = dictionary["title"] ?? "" 
     self.text = dictionary["text"] ?? "" 
     self.link = dictionary["link"] ?? "" 
     self.imgUrl = dictionary["imgUri"] ?? "" 
    } 
} 

//Array which holds the news 
var newsData = [News]() 

// Download the news 
func downloadData() { 
    Alamofire.request("https://api.sis.kemoke.net/news").responseJSON { response in 
     print(response.request as Any) // original URL request 
     print(response.response as Any) // HTTP URL response 
     print(response.data as Any)  // server data 
     print(response.result) // result of response serialization 

     //Optional binding to handle exceptions 
     self.newsData.removeAll() // clean the data source array 
     if let json = response.result.value as? [[String:String]] { 
      for news in json { 
       self.newsData.append(News(dictionary: news)) 
      } 
      self.tableView.reloadData() 
     } 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    downloadData() 
    tableView.rowHeight = 100 
} 

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

override func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return newsData.count 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? newsCellTableViewCell 
    let news = newsData[indexPath.row] 
    cell?.headline.text = news.title 

    Alamofire.request(news.imgUrl).responseImage { response in 
     debugPrint(response) 
     print(response.request as Any) 
     print(response.response as Any) 
     debugPrint(response.result) 
     let cellImage = response.result.value 
     if let image = response.result.value { 
      print("image downloaded: \(image)") 
     } 
     cell?.thumbnailImage.image = cellImage 
    } 
    print(news.imgUrl) 
    return cell! 
    } 


     // MARK: - Navigation 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "showArticle" { 
     let nextScene = segue.destination as! ArticleViewController 
     // Pass the selected object to the new view controller. 
     if let indexPath = self.tableView.indexPathForSelectedRow { 
      let selectedCells = newsData[indexPath.row] 
      nextScene.articleTitleString = selectedCells.title 
      nextScene.receiveFullText = selectedCells.title 

      //Downloading an image to be displayed in a single article 
      Alamofire.request(selectedCells.imgUrl).responseImage { response in 
       debugPrint(response) 
       print(response.request as Any) 
       print(response.response as Any) 
       debugPrint(response.result) 
       let cellImage = response.result.value 
       nextScene.articleImage.image = cellImage! 
      } 
     } 
    } 
} 
} 

И вот мой назначения контроллер представления для одной статьи, в которой Я передаю информацию

class ArticleViewController: UIViewController { 

@IBOutlet weak var articleTitle: UILabel! 
var articleTitleString = "" 
@IBOutlet weak var articleImage: UIImageView! 
@IBOutlet weak var fullText: UITextView! 
var receiveFullText = "" 

override func viewWillAppear(_ animated: Bool) { 
    articleTitle.text = articleTitleString 
    fullText.text = receiveFullText 
} 
} 

И это то, что происходит

http://imgur.com/2GQddeW

http://imgur.com/jos3VhE

См.? Полный текст не отображается, даже если сервер возвращает полный текст. Я проверил это, создав textView в другом контроллере представления и получив текст с сервера, и он работал нормально.

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

Я хочу загрузить полный текст, когда это происходит.

+0

Насколько я понимаю, ваш tableViewCell имеет фиксированную высоту. Но ваш текст слишком много для этого. См. [Здесь] (http://candycode.io/automatically-resizing-uitableviewcells-with-dynamic-text-height-using-auto-layout/) и [здесь] (http://stackoverflow.com/questions/19211083/how-to-resize-uitableviewcell-to-fit-its-content) – Honey

+0

@Adin Ljudina, вы имеете в виду, что вы передали неправильные данные? – aircraft

+0

@Honey Высота ячейки представления таблицы не важна, важно то, что текст должен отображаться в новом viewController, пожалуйста, проверьте этот снимок экрана, и вы увидите, что мой текст становится короче. Посмотрите на последнее слово «SEDEF», он получает три точки, потому что есть еще что-то отображаемое, и почему-то это не так. –

ответ

0
nextScene.articleTitleString = selectedCells.title 
nextScene.receiveFullText = selectedCells.title 

Вы передаете титул дважды вместо полного текста ...

+0

Я скорректировал его на nextScene.receiveFullText = selectedCells. текст , но мой текст еще не отображается полностью. Пожалуйста, проверьте этот снимок экрана, который я только что сделал http://imgur.com/Dxqp9qC –

+0

В этом случае кажется, что UITextView на втором контроллере недостаточно большой. Перейдите к построителю интерфейса и убедитесь, что он заполняет всю желтую область (возможно, вам придется добавлять ограничения). Вы также можете нарисовать фон UITextView, чтобы подтвердить правильность его размера. –

+0

Он полностью растянут, поэтому он принимает всю часть экрана, это не проблема. –

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