2016-05-30 11 views
1

私は各セルのドロップダウンを実行したいので、セル内にテーブルビューを挿入しています。クリックするとセルが展開されて展開するセルで作業しているので、ドロップダウンとして表示されます。どのようにすれば、あるクラスから別のクラスへのテーブルビューの委譲メソッドを迅速に呼び出すことができますか?

MainTableView:

import UIKit 

class MainTableView: UIViewController,UITableViewDelegate,UITableViewDataSource { 

@IBOutlet weak var mainTableView: UITableView! 
var selectedCellIndexPath: NSIndexPath? 
let selectedCellHeight: CGFloat = 300.0 
let unselectedCellHeight: CGFloat = 44.0 
var name = ["red","green","blue","white"] 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return name.count 
} 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = mainTableView.dequeueReusableCellWithIdentifier("cell1" , forIndexPath: indexPath) as! mainTableViewCell 
    cell.Title.text = name[indexPath.row] 
    return cell 
} 
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if selectedCellIndexPath == indexPath { 
     return selectedCellHeight 
    } 
    return unselectedCellHeight 
} 
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    if selectedCellIndexPath != nil && selectedCellIndexPath == indexPath { 
     selectedCellIndexPath = nil 
    } else { 
     selectedCellIndexPath = indexPath 
    } 

    tableView.beginUpdates() 
    tableView.endUpdates() 

    if selectedCellIndexPath != nil { 
     // This ensures, that the cell is fully visible once expanded 
     tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .None, animated: true) 
    } 
} 

} 

MainTableViewCell:

import UIKit 

class MainTableViewCell:UITableViewCell,UITableViewDataSource,UITableViewDelegate { 

@IBOutlet weak var dropDownList: UITableView! 
@IBOutlet weak var Title: UILabel! 
var selectedCellIndexPath: NSIndexPath? 
let selectedCellHeight: CGFloat = 0.0 
let unselectedCellHeight: CGFloat = 44.0 
var name = ["magenta","yellow","orange","cyan","black","grey"] 
override func awakeFromNib() { 
    super.awakeFromNib() 

    dropDownList.delegate = self 
    dropDownList.dataSource = self 
} 

override func setSelected(selected: Bool, animated: Bool) 
{ 
    super.setSelected(selected, animated: animated) 
} 
func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return name.count 
} 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = dropDownList.dequeueReusableCellWithIdentifier("cell2", forIndexPath: indexPath) as! subTableViewCell 
    cell.subTitle.text = name[indexPath.row] 
    return cell 
} 
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if selectedCellIndexPath == indexPath { 
     return selectedCellHeight 
    } 
    return unselectedCellHeight 
} 
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    /* If I select any row in subTableView then the tableview has to disappear and the height of mainTableView row should be rearranged(i.e the dropdown should dissappear) */ 

} 

InnerTableViewCell: 輸入のUIKit

class subTableViewCell: UITableViewCell { 

@IBOutlet weak var subTitle: UILabel! 
override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

} 

私はmainTableViewCellクラスでmainTableViewのデリゲートメソッドを呼び出した場合、それは簡単だろうしかし、私はこれと闘っている.Hel私!

+0

使用postNotification方法やカスタムデリゲートメソッド、 –

+0

を私は読んでいません全てのコードが 'MainTableView'にコールバックしたいのであれば、トップレベルの' cellForRowAtIndexPath'の間に 'self'(つまりメインコントローラ)にセットされる' MainTableViewCell'プロパティを与えるのはどうですか? –

答えて

0

セルにデリゲートメソッドを最初に作成します -

import UIKit 

protocol MainTableViewCellDelegate { 
    func myFunc() 
} 

class MainTableViewCell:UITableViewCell,UITableViewDataSource,UITableViewDelegate { 

    var MainTableViewCellDelegate! = nil 

    // Put Your Other code Lines 


    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     delegate.myFunc() 
    } 
} 

次に、あなたのMainTableViewにMainTableViewCellDelegate追加: -

import UIKit 

class MainTableView: UIViewController,UITableViewDelegate,UITableViewDataSource, MainTableViewCellDelegate { 

     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
      let cell = dropDownList.dequeueReusableCellWithIdentifier("cell2", forIndexPath: indexPath) as! subTableViewCell 
      cell.subTitle.text = name[indexPath.row] 
      cell.delegate = self 
      return cell 
     } 

     func myFunc() { 
      self.performSegueWithIdentifier("yourSegueIdentifier", sender: nil) //Put your segue 
     } 
} 
+0

別のテーブルビューのセル内にあるテーブルビューを使用してドロップダウンを実行する方法を教えてください。 – GuganReddy

+0

そのためには、サードパーティのライブラリやチュートリアルを参照してください。 –

関連する問題