Int में स्विफ्ट पर आधारित UITableView की निश्चित पंक्ति को ताज़ा करें


88

मैं स्विफ्ट में एक शुरुआती डेवलपर हूं, और मैं एक मूल ऐप बना रहा हूं जिसमें UITableView शामिल है। मैं उपयोग करके तालिका की एक निश्चित पंक्ति को ताज़ा करना चाहता हूं:

self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.none)

और मैं चाहता हूं कि वह पंक्ति जिसका नाम किसी पंक्ति से हो, जिसे नया नाम दिया जाए

समस्या यह है, मुझे नहीं पता कि यह कैसे करना है और मेरे द्वारा खोजे गए सभी धागे ओबज-सी के लिए हैं

कोई विचार?


क्या केवल एक ही खंड है?
लिंडसे स्कॉट

जवाबों:


195

आप एक NSIndexPathपंक्ति और अनुभाग संख्या का उपयोग करके बना सकते हैं और फिर इसे इस तरह लोड कर सकते हैं:

let indexPath = NSIndexPath(forRow: rowNumber, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)

इस उदाहरण में, मैंने मान लिया है कि आपकी तालिका में केवल एक खंड (यानी 0) है, लेकिन आप उस मूल्य को तदनुसार बदल सकते हैं।

स्विफ्ट 3.0 के लिए अपडेट:

let indexPath = IndexPath(item: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .top)

यदि विशेष खंड के लिए पंक्तियों की संख्या को बदला जा रहा है तो? @ लिंडसी स्कॉट
डुबकी

@ लिंडसे: वास्तव में पहली बार कहते हैं कि मेरे पास उस खंड में 2 सेल हैं, जिन्हें मैं फिर से लोड करने जा रहा हूं, फिर से लोड करने के बाद कहता हूं कि मेरे पास उस विशेष खंड में कोशिकाओं की संख्या (x) होगी, इसलिए मेरा सवाल यह है कि लाइन के अनुसार indexpath गणना, iam अनुभाग के बारे में निश्चित है, लेकिन मैं पंक्तियों की संख्याओं पर उलझन में हूं, क्योंकि यह पंक्तियों की संख्या में परिवर्तन के कारण दुर्घटनाग्रस्त हो रहा है IndexPath = NSIndexPath (forRow: rowNumber, inSection: 0
dip

@dip आपको अपना tableView देखना होगा: numberOfRowsInSection: विधि एल्गोरिथ्म उस जानकारी को प्राप्त करने के लिए ... मैं फ़ोरम पर आपके प्रश्न को पोस्ट करने की सलाह दूंगा क्योंकि यह एक विशिष्ट मुद्दे की तरह लगता है जो आप अपने कोड के साथ कर रहे हैं ...
Lyndsey स्कॉट

इस विधि को कहाँ से करें?
मास्टर एजेंटएक्स

22

एक नरम प्रभाव एनीमेशन समाधान के लिए:

स्विफ्ट 3:

let indexPath = IndexPath(item: row, section: 0)
tableView.reloadRows(at: [indexPath], with: .fade)

स्विफ्ट 2.x:

let indexPath = NSIndexPath(forRow: row, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

यह ऐप को क्रैश होने से बचाने का एक और तरीका है:

स्विफ्ट 3:

let indexPath = IndexPath(item: row, section: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.index(of: indexPath as IndexPath) {
    if visibleIndexPaths != NSNotFound {
        tableView.reloadRows(at: [indexPath], with: .fade)
    }
}

स्विफ्ट 2.x:

let indexPath = NSIndexPath(forRow: row, inSection: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.indexOf(indexPath) {
   if visibleIndexPaths != NSNotFound {
      tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
   }
}

4

स्विफ्ट 4

let indexPathRow:Int = 0    
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)

2

स्विफ्ट 3.0 में

let rowNumber: Int = 2
let sectionNumber: Int = 0

let indexPath = IndexPath(item: rowNumber, section: sectionNumber)

self.tableView.reloadRows(at: [indexPath], with: .automatic)

byDefault, यदि आपके पास TableView में केवल एक खंड है, तो आप अनुभाग मान 0 डाल सकते हैं।


2
let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)

1
नमस्ते, स्टैक ओवरफ्लो में आपका स्वागत है और आपके पहले उत्तर के लिए धन्यवाद। उत्तर को अन्य लोगों के लिए अधिक उपयोगी बनाने के लिए, अपने उत्तर को पाठ के साथ एनोटेट करना सबसे अच्छा अभ्यास है जो बताता है कि यह ओपी के मूल प्रश्न को क्यों संबोधित करता है।
स्पैनजेन

2

स्विफ्ट 4.2

    func reloadYourRows(name: <anyname>) {
    let row = <your array name>.index(of: <name passing in>)
    let reloadPath = IndexPath(row: row!, section: 0)
    tableView.reloadRows(at: [reloadPath], with: .middle)
    }

1

इसके अलावा, यदि आपके पास टेबलव्यू के लिए खंड हैं , तो आपको उन पंक्तियों को खोजने की कोशिश नहीं करनी चाहिए जिन्हें आप ताज़ा करना चाहते हैं, आपको पुनः लोड वर्गों का उपयोग करना चाहिए। यह आसान और अधिक संतुलित प्रक्रिया है:

yourTableView.reloadSections(IndexSet, with: UITableViewRowAnimation)

0

कैसा रहेगा:

self.tableView.reloadRowsAtIndexPaths([NSIndexPath(rowNumber)], withRowAnimation: UITableViewRowAnimation.Top)

0

स्विफ्ट 4.1

जब आप पंक्ति के चयनितटैग का उपयोग करके पंक्ति को हटाते हैं तो इसका उपयोग करें।

self.tableView.beginUpdates()

        self.yourArray.remove(at:  self.selectedTag)
        print(self.allGroups)

        let indexPath = NSIndexPath.init(row:  self.selectedTag, section: 0)

        self.tableView.deleteRows(at: [indexPath as IndexPath], with: .automatic)

        self.tableView.endUpdates()

        self.tableView.reloadRows(at: self.tableView.indexPathsForVisibleRows!, with: .automatic)

0

मुझे एहसास है कि यह सवाल स्विफ्ट के लिए है, लेकिन यहां एक्समरीन एक स्वीकृत उत्तर के बराबर कोड है यदि कोई दिलचस्पी रखता है।

var indexPath = NSIndexPath.FromRowSection(rowIndex, 0);
tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.Top);

0
    extension UITableView {
        /// Reloads a table view without losing track of what was selected.
        func reloadDataSavingSelections() {
            let selectedRows = indexPathsForSelectedRows

            reloadData()

            if let selectedRow = selectedRows {
                for indexPath in selectedRow {
                    selectRow(at: indexPath, animated: false, scrollPosition: .none)
                }
            }
        }
    }

tableView.reloadDataSavingSelections()

मैंने खुद को एक विशेष स्थिति में पाया। मेरा मुख्य लक्ष्य यह पूरा करना था कि जब उपयोगकर्ता सेल में हो। और मैंने कुछ संशोधन किया है। आप केवल कक्ष को अपडेट कर सकते हैं, यह पूरी तालिका को लोड किए बिना और उपयोगकर्ता को भ्रमित किए बिना है। इस कारण से, यह फ़ंक्शन एक कस्टम ReloadDataCell जोड़कर tableView गुणों का लाभ उठाता है। और tableview.reloadDataSavingSelecctions () जोड़ रहा है। जहां, आप कुछ कार्रवाई करते हैं। और एक बार मैंने किया, मैं उस समाधान को आपके साथ साझा करना चाहता था।
इरविन बी

कृपया अपने उत्तर में इसे संपादित करके सभी स्पष्टीकरण जोड़ें
निको हासे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.