我想將資料從一個表格視圖單元格傳遞到另一個表格視圖單元格。當用戶單擊添加按鈕時,我想將這些表視圖單元格值添加到另一個段控制元件。我在同一個視圖控制器中有兩個帶有單元格的表格視圖。我正在跟隨代表實施它,但我面臨一些問題。
1. 我使用 isHide 方法根據段控制元件選擇隱藏特定的表格視圖,盡管我想顯示一個并且兩個段顯示相同的資料,但仍然顯示兩個表格視圖。
這是代碼。
@IBAction func selectSegment(_ sender: UISegmentedControl) {
if sender.selectedSegmentIndex == 0{
FavouriteTableView.isHidden = true
setUpUI()
presenter = MoviePresenter(view: self)
presenter.getMovies()
}
}
2.當用戶單擊按鈕但實際上不起作用時,我想將表視圖單元格值添加到秒表視圖單元格中。這是兩個表視圖單元格的代碼。
protocol CellSubclassDelegate: AnyObject {
func buttonTapped(cell: MovieViewCell)
}
class MovieViewCell: UITableViewCell {
weak var delegate:CellSubclassDelegate?
static let identifier = "MovieViewCell"
@IBOutlet weak var movieImage: UIImageView!
@IBOutlet weak var movieTitle: UILabel!
@IBOutlet weak var movieOverview: UILabel!
@IBOutlet weak var someButton: UIButton!
@IBAction func someButtonTapped(_ sender: UIButton) {
self.delegate?.buttonTapped(cell: self)
}
override func prepareForReuse() {
super.prepareForReuse()
self.delegate = nil
}
func configureCell(title: String?, overview: String?, data: Data?) {
movieTitle.text = title
movieOverview.text = overview
movieImage.image = nil
if let imageData = data{
movieImage.image = UIImage(data: imageData)
// movieImage.image = nil
}
}
}
第二個單元格的代碼。
protocol CellDelegate: AnyObject {
func AddFavourite(cell: FavouriteTableViewCell)
}
class FavouriteTableViewCell: UITableViewCell {
weak var delegate:CellDelegate?
@IBOutlet weak var FavouriteImage: UIImageView!
@IBOutlet weak var FavouritemovieTitle: UILabel!
@IBOutlet weak var FavouritemovieOverview: UILabel!
@IBAction func NewMovie(_ sender: UIButton) {
self.delegate?.AddFavourite(cell: self)
}
}
表視圖控制器代碼實作..
class MovieViewController: UIViewController, UISearchBarDelegate {
@IBOutlet weak var userName: UILabel!
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var FavouriteTableView: UITableView!
@IBOutlet weak var segmentControl: UISegmentedControl!
private var presenter: MoviePresenter!
var finalname = ""
var movieTitle = ""
var movieOverview = ""
var movieImage : UIImage?
override func viewDidLoad() {
super.viewDidLoad()
userName.text = "Hello: " finalname
}
private func setUpUI() {
tableView.dataSource = self
tableView.delegate = self
}
private func searchBarText() {
searchBar.delegate = self
}
@IBAction func selectSegment(_ sender: UISegmentedControl) {
if sender.selectedSegmentIndex == 0{
FavouriteTableView.isHidden = true
setUpUI()
presenter = MoviePresenter(view: self)
presenter.getMovies()
}
}
extension MovieViewController: MovieViewProtocol {
func resfreshTableView() {
tableView.reloadData()
}
func displayError(_ message: String) {
let alert = UIAlertController(title: "Error", message: message, preferredStyle: .alert)
let doneButton = UIAlertAction(title: "Done", style: .default, handler: nil)
alert.addAction(doneButton)
present(alert, animated: true, completion: nil)
}
}
extension MovieViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
presenter.rows
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: MovieViewCell.identifier, for: indexPath) as! MovieViewCell
let row = indexPath.row
let title = presenter.getTitle(by: row)
let overview = presenter.getOverview(by: row)
let baseImageURL = presenter.getUrlImage(by: row)
let data = presenter.getImageData(by: baseImageURL)
cell.delegate = self
cell.configureCell(title: title, overview: overview, data: data)
return cell
}
extension MovieViewController : CellSubclassDelegate{
func buttonTapped(cell: MovieViewCell) {
guard (self.tableView.indexPath(for: cell) != nil) else {return}
let customViewController = storyboard?.instantiateViewController(withIdentifier: "MovieDeatilsViewController") as? MovieDeatilsViewController
customViewController?.titlemovie = cell.movieTitle.text ?? ""
customViewController?.imagemovie = cell.movieImage.image
customViewController?.overview = cell.movieOverview.text ?? ""
self.navigationController?.pushViewController(customViewController!, animated: true)
}
}
extension MovieViewController : CellDelegate{
func AddFavourite(cell: FavouriteTableViewCell) {
guard (self.tableView.indexPath(for: cell) != nil) else {return}
movieTitle = cell.FavouritemovieTitle.text ?? ""
movieOverview = cell.FavouritemovieOverview.text ?? ""
movieImage = cell.FavouriteImage.image
}
}
這里是應用程式設計的螢屏截圖。

這是應用程式的螢屏截圖。

uj5u.com熱心網友回復:
首先,在您的代碼中,您需要最喜歡的電影的模型,而不是將其保存在全域存盤中,例如:
struct Movie {
let title: String
let overview: String
let image: UIImage?
}
將您的陣列模型添加到您的控制器中:
// append to this array when user taped on favorite button
var favorites = [Movie]()
在 tableViewDelegate 中將每個你是 tableView 分開(在這種情況下最好只使用一個 tableView):
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == FavoriteTableView {
return favorites.count
} else {
return presenter.rows
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == FavoriteTableView {
let cell = tableView.dequeueReusableCell(withIdentifier: FavouriteTableViewCell, for: indexPath) as! FavouriteTableViewCell
cell.delegate = self // This cause favorite protocol method trigered
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: MovieViewCell.identifier, for: indexPath) as! MovieViewCell
let row = indexPath.row
let title = presenter.getTitle(by: row)
let overview = presenter.getOverview(by: row)
let baseImageURL = presenter.getUrlImage(by: row)
let data = presenter.getImageData(by: baseImageURL)
cell.delegate = self
cell.configureCell(title: title, overview: overview, data: data)
return cell
}
}
并在需要時更新其他類似的委托方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/429691.html
