2017-10-05 2 views
0

다음과 같이 구현하고 있습니다. UITabViewCell (그림 1)을 탭하면 UICollectionViewController (그림 2)로 이동합니다. 그냥 보여주는 다음의 두 사진과 같은 :Swift 4에서 프로그래밍 방식으로 UITableViewCell에서 UICollectionViewController로 이동하는 방법

Picture 1

Picture 2

나는 경우 탭합니다있는 UITableViewCell의 UIViewController를 탐색 할 수 있지만 내가 UICollectionView로 이동하려고 할 때 작동하지 않습니다. 여기 내 코드는 다음과 같습니다 코드의

import UIKit 

class RealUserProfileController: UIViewController, UITableViewDelegate, UITableViewDataSource { 


    private let me = ["Vincent-St"] 
    private let followers = ["58 Followers"] 
    private let myPhotos = ["New Followers"] 
    private let others = ["My likes", "Notifications", "Clear Caches", "Drafts"] 
    private let settings = ["Settings"] 
    private let share = ["Share with friends"] 
    private let images = ["Hearts.png", "Footprint.png", "Notifications.png", "Trash-Empty.png"] 


    private let sections = ["me", "myPhotos", "others", "settings", "share"] 



    override func viewDidLoad() { 

     super.viewDidLoad() 
     self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: UIFont(name: "Arial", size: 18)!, NSAttributedStringKey.foregroundColor: UIColor.black] 
     navigationItem.title = "Profile" 
     let displayWidth: CGFloat = self.view.frame.width 
     let displayHeight: CGFloat = self.view.frame.height 
     let myTableView: UITableView = UITableView(frame: CGRect(x: 0, y: 0, width: displayWidth, height: displayHeight), style: .grouped) 


     myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell") 

     myTableView.dataSource = self 

     myTableView.delegate = self 

     self.view.addSubview(myTableView) 

     view.backgroundColor = UIColor(white: 1, alpha: 0.95) 

     myTableView.translatesAutoresizingMaskIntoConstraints = false 
     myTableView.topAnchor.constraint(equalTo: view.topAnchor, constant: -20).isActive = true 
     myTableView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
     myTableView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true 
     myTableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true 

    } 

    func numberOfSections(in tableView: UITableView) -> Int { 
     return sections.count 
    } 



    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 

     if indexPath.section == 0 { 
      return 72 
     } 
     return tableView.rowHeight 
    } 


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

     if indexPath.section == 0 { 
      let controller = UserProfileController() 
      self.navigationController?.pushViewController(controller, animated: true) 
      print("Value: \(me[indexPath.row])") 
     } else if indexPath.section == 1 { 
      print("Value: \(myPhotos[indexPath.row])") 
     } else if indexPath.section == 2 { 
      print("Value: \(others[indexPath.row])") 
     } else if indexPath.section == 3 { 
      let controller = ResultController() 
      navigationController?.pushViewController(controller, animated: true) 
      print("Value: \(settings[indexPath.row])") 
     } else if indexPath.section == 4 { 
      print("Value: \(share[indexPath.row])") 
      let shareText = "Share our app" 
      let shareImage = UIImage(named: "bell_unselected.png") 
      let activityViewController : UIActivityViewController = UIActivityViewController(activityItems: [shareText, shareImage as Any], applicationActivities: nil) 
      self.present(activityViewController, animated: true, completion: nil) 
     } 
    } 



    // return the number of cells each section. 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if section == 0 { 
      return me.count 
     } else if section == 1 { 
      return myPhotos.count 
     } else if section == 2 { 
      return others.count 
     } else if section == 3 { 
      return settings.count 
     } else if section == 4 { 
      return share.count 
     } else { 
      return 0 
     } 
    } 

    // return cells 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "MyCell") 
     if indexPath.section == 0 { 

      cell.textLabel?.text = "\(me[indexPath.row])" 
      cell.detailTextLabel?.text = "\(followers[indexPath.row])" 
      cell.imageView?.image = #imageLiteral(resourceName: "profile_image") 

     } else if indexPath.section == 1 { 
      cell.textLabel?.text = "\(myPhotos[indexPath.row])" 
      cell.imageView?.image = #imageLiteral(resourceName: "icon_friends") 
     } else if indexPath.section == 2 { 
      cell.textLabel?.text = "\(others[indexPath.row])" 
      cell.imageView?.image = UIImage.init(named: images[indexPath.row]) 

     } else if indexPath.section == 3 { 
      cell.textLabel?.text = "\(settings[indexPath.row])" 
      cell.imageView?.image = #imageLiteral(resourceName: "Icon_Settings") 
     } else if indexPath.section == 4 { 
      cell.textLabel?.text = "\(share[indexPath.row])" 
      cell.imageView?.image = #imageLiteral(resourceName: "Share") 
     } 

     cell.accessoryType = .disclosureIndicator 

     return cell 
    } 

} 

두 개의 선이 응용 프로그램 충돌합니다 : 여기

 let controller = UserProfileController() 
     self.navigationController?.pushViewController(controller, animated: true) 

를 오류 메시지 : 여기

Cannot convert value of type 'UserProfileController.Type' to expected argument type 'UIViewController' 

하는 대상 UICollectionViewController의 코드는 :

class UserProfileController: UICollectionViewController, UICollectionViewDelegateFlowLayout { 

} 

약간의 연구 끝에 유용한 정보를 찾지 못했습니다. 그것이 일어날 수있는 방법이 있습니까? 또는 다른 방법으로 Picture 2를 구현할 수있는 방법이 있습니까? UIViewController, UICollectionView 대신?

의견을 보내 주시면 감사하겠습니다.

+0

viewController를 만들려고 시도하십시오 storyboar에서 d –

+1

오류 메시지가 무엇입니까? –

+0

@ YunCHEN 오류 메시지가 나타나지 않고 충돌이 발생합니다. – user174782

답변

0

문제가 탐색과 관련이 없다고 생각하면 UIViewController의 하위 클래스를 탐색 할 수 있어야합니다.

나는 당신이 제시됩니다 경우 그렇지 않으면 collectionView가 충돌합니다, init(collectionViewLayout: UICollectionViewLayout)는, collectionView 레이아웃 설정을해야 사용 UICollectionViewController를 초기화해야 믿습니다.

따라서 대신 :

let controller = UserProfileController() 

하여 사용해보십시오 : 나는 다음과 같은 코드가 UserProfileController의 전체 구현이라고 가정하고

다음
let controller = UserProfileController(collectionViewLayout: UICollectionViewFlowLayout()) 

, 따라서 직접 UICollectionViewController에서 초기화를 상속 :

class UserProfileController: UICollectionViewController, UICollectionViewDelegateFlowLayout { 

} 
+0

오, 이런. 그게 바로 문제입니다. 정말 고맙습니다. 넌 나를 구했다. – user174782

+0

나는이 함정에 이미 여러 번 빠졌다. .. upvote에게 감사드립니다. –