2016-04-28 12 views
10

मैं कोशिकाओं का विस्तार और पतन करने में सक्षम हूं लेकिन मैं बटन शीर्षक बदलने के लिए UITableViewCell के अंदर फ़ंक्शन (विस्तार और पतन) कॉल करना चाहता हूं।तालिकादृश्य कक्षों का विस्तार और संकुचित करें

Iphone 5

 
import UIKit 

class MyTicketsTableViewController: UITableViewController { 

    var selectedIndexPath: NSIndexPath? 
    var extraHeight: CGFloat = 100 

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

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

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 5 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! MyTicketsTableViewCell 
     return cell 
    } 

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     if(selectedIndexPath != nil && indexPath.compare(selectedIndexPath!) == NSComparisonResult.OrderedSame) { 
      return 230 + extraHeight 
     } 

     return 230.0 
    } 

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     if(selectedIndexPath == indexPath) { 
      selectedIndexPath = nil 
     } else { 
      selectedIndexPath = indexPath 
     } 

     tableView.beginUpdates() 
     tableView.endUpdates() 
    } 
} 

 
import UIKit 

class MyTicketsTableViewCell: UITableViewCell { 

    @IBOutlet weak var expandButton: ExpandButton! 
    @IBOutlet weak var detailsHeightConstraint: NSLayoutConstraint! 

    var defaultHeight: CGFloat! 

    override func awakeFromNib() { 
     super.awakeFromNib() 

     defaultHeight = detailsHeightConstraint.constant 

     expandButton.button.setTitle("TAP FOR DETAILS", forState: .Normal) 
     detailsHeightConstraint.constant = 30 
    } 

    func expand() { 
     UIView.animateWithDuration(0.3, delay: 0.0, options: .CurveLinear, animations: { 
      self.expandButton.arrowImage.transform = CGAffineTransformMakeRotation(CGFloat(M_PI * 0.99)) 
      self.detailsHeightConstraint.constant = self.defaultHeight 
      self.layoutIfNeeded() 

      }, completion: { finished in 
       self.expandButton.button.setTitle("CLOSE", forState: .Normal) 
     }) 
    } 

    func collapse() { 
     UIView.animateWithDuration(0.3, delay: 0.0, options: .CurveLinear, animations: { 
      self.expandButton.arrowImage.transform = CGAffineTransformMakeRotation(CGFloat(M_PI * 0.0)) 
      self.detailsHeightConstraint.constant = CGFloat(30.0) 
      self.layoutIfNeeded() 

      }, completion: { finished in 
       self.expandButton.button.setTitle("TAP FOR DETAILS", forState: .Normal) 
     }) 
    } 

} 

+0

इस समाधान की जाँच करें: (https://stackoverflow.com/questions/21396907/how-to-programmatically-increase-uitableview-cells-height-in-iphone/45424594# [कड़ी यहाँ विवरण दर्ज] 45424594) –

उत्तर

12

आप सेल शारीरिक रूप से बड़ा पाने के लिए है, तो जहां आप अपने स्टोर NSIndexPath है heightForRow: उपयोग में, चाहते हैं: जब आप का विस्तार करना चाहते

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if selectedIndexPath == indexPath { 
     return 230 + extraHeight 
    } 
    return 230.0 
} 

फिर didSelectRow में से एक:

storedIndexPath = indexPath 
tableView.beginUpdates 
tableView.endUpdates 

संपादित

यह कोशिकाओं चेतन खुद को बड़ा हो रही कर देगा, सेल में अतिरिक्त एनीमेशन ब्लॉक की जरूरत है आप नहीं है।

संपादित 2

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     if(selectedIndexPath == indexPath) { 
      selectedIndexPath = nil 

      if let cell = tableView.cellForRowAtIndexPath(indexPath) as? MyTicketsTableViewCell { 
      cell.collapse() 
      } 
      if let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow:indexPath.row+1, section: indexPath.section) as? MyTicketsTableViewCell { 
      cell.collapse() 
      } 
     } else { 
      selectedIndexPath = indexPath 

      if let cell = tableView.cellForRowAtIndexPath(indexPath) as? MyTicketsTableViewCell { 
       cell.expand() 
      } 

      if let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow:indexPath.row+1, section: indexPath.section) as? MyTicketsTableViewCell { 
      cell.expand() 
      } 
     } 

     tableView.beginUpdates() 
     tableView.endUpdates() 
    } 
+0

जैसा कि आपने कहा था, मैं सेल को संक्षिप्त और विस्तारित करने में सक्षम हूं। लेकिन मैं सेल के अंदर बटन शीर्षक बदलना चाहता हूं तो मैं सेल के अंदर एक फ़ंक्शन कैसे कॉल कर सकता हूं। –

+0

कृपया संपादित करें 2: – SeanLintern88

+0

दो कक्ष कॉलिंग कार्य करते हैं। मेरा मतलब है कि जब मैं एक सेल पर क्लिक करता हूं, तो दो कोशिकाएं फ़ंक्शन रन का विस्तार करती हैं :( –

2

आपको बस UITableView प्रतिनिधि को लागू इस तरह से है:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 

override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 

डिफ़ॉल्ट रूप से, estimatedHeight CGRectZero है, जब आप इसके लिए कुछ मूल्य निर्धारित करते हैं, यह autoresizing सक्षम बनाता है (UICollectionView के साथ एक ही स्थिति), आप यह भी कर सकते हैं:

tableView?.estimatedRowHeight = CGSizeMake(50.f, 50.f); 

फिर आपको अपने सेल के अंदर बाधाओं को स्थापित करने की आवश्यकता है।

चेक इस पोस्ट: https://www.hackingwithswift.com/read/32/2/automatically-resizing-uitableviewcells-with-dynamic-type-and-ns

आशा है कि यह मदद करता है)

+0

पर कॉल करें यह एक टिप्पणी होनी चाहिए। –

+0

अनुमानित हाइट के लिए UITableViewAutomaticDimension का उपयोग पूरे उद्देश्य को हरा देता है अनुमानित हाइट का उपयोग करने के पहले स्थान पर - यह आपकी तालिका में प्रत्येक इंडेक्सपैथ पर ऑटो लेआउट को कॉल करने जा रहा है, पूरी सामग्री के लिए ऊंचाई की गणना करने के लिए, केवल दृश्यमान कक्षों के लिए ऑटो लेआउट का उपयोग करने के बजाय, और अनुमानित हाइट (जो आदर्श रूप से बहुत तेज है गणना करने के लिए) सभी गैर-दृश्यमान इंडेक्सपैथ्स के लिए। –

1

MyTicketsTableViewController कक्षा में, cellForRowAtIndexPath डेटा स्रोत विधि के अंदर बटन के लिए लक्ष्य जोड़ें।

cell.expandButton.addTarget(self, action: "expandorcollapsed:", forControlEvents: UIControlEvents.TouchUpInside) 
+0

मुझे समझ में नहीं आता कि यह क्या है? –

+0

आपके कॉलिंग टेबलव्यूसेल क्लास.in में इसके कॉलिंग का विस्तार और ढहने के तरीके, इसके tableviewcontroller में विस्तार, पतन विधि और सेलफॉररोएटइंडेक्सपैथ कॉल में घोषित करें इस तरह की विधि – Jeyamahesan

संबंधित मुद्दे