সুইট ইন ইন সুইটের উপর ভিত্তি করে ইউআইটিএবলভিয়ের নির্দিষ্ট সারিটি রিফ্রেশ করুন


90

আমি সুইফটে একটি প্রাথমিক বিকাশকারী এবং আমি একটি বেসিক অ্যাপ তৈরি করছি যা একটি ইউআইটিবেল ভিউ অন্তর্ভুক্ত করে। আমি টেবিলের একটি নির্দিষ্ট সারিটি ব্যবহার করে তা রিফ্রেশ করতে চাই:

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

এবং আমি চাই যে সারিটি রিফ্রেশ হবে রো নাম্বার নামক একটি নাম থেকে আসা

সমস্যাটি হচ্ছে, আমি কীভাবে এটি করব তা জানি না এবং আমি যে সমস্ত থ্রেড অনুসন্ধান করেছি সেগুলি ওবজ-সি এর জন্য

কোন ধারনা?


শুধুমাত্র একটি বিভাগ আছে?
লিন্ডসে স্কট 3

উত্তর:


198

আপনি 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 টি কোষ রয়েছে, পুনরায় লোড করার পরে বলতে পারি যে সেই বিশেষ বিভাগে আমার কোনও (এক্স) নম্বর থাকবে, সুতরাং আমার প্রশ্নটি লাইনের সাথে আছে indexpath হিসাব, বিভাগ সম্পর্কে নিশ্চিত IAM কিন্তু আমি সারির সংখ্যার উপর বিভ্রান্ত করছি, কারণ এটি সারি সংখ্যা পরিবর্তনের বিপর্যয় হয় Var indexPath = NSIndexPath (forRow: rowNumber, inSection: 0)
চোবান

@ ডিপ আপনার আপনার টেবিলটি দেখার প্রয়োজন: ভিউ: নম্বরঅফ্রাউজইনসেকশন: সেই তথ্যটি পাওয়ার জন্য পদ্ধতি অ্যালগরিদম ... আমি ফোরামটিতে আপনার প্রশ্ন পোস্ট করার পরামর্শ দিচ্ছি কারণ এটি আপনার কোড সহ কোনও নির্দিষ্ট সমস্যা বলে মনে হচ্ছে ...
লেন্ডসে স্কট

কোথায় এই পদ্ধতি কল?
মাস্টার এজেন্টএক্স

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)
   }
}

3

সুইফট ৩.০ এ

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

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

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

বাই ডিফল্ট, যদি আপনার টেবিলভিউতে কেবল একটি বিভাগ থাকে তবে আপনি বিভাগের মান 0 রাখতে পারেন।



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

4
হাই, স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম এবং আপনার প্রথম উত্তরের জন্য আপনাকে ধন্যবাদ। উত্তরটি অন্য লোকের কাছে আরও দরকারী করে তোলার জন্য, আপনার উত্তরটিকে পাঠ্যের সাহায্যে বর্ণনা করা ভাল অনুশীলন যা এটি ওপির মূল প্রশ্নটিকে কেন সম্বোধন করে তা ব্যাখ্যা করে।
স্প্যানজেন

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

সুইফট 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()

আমি নিজেকে একটি বিশেষ পরিস্থিতিতে পেয়েছি। আমার মূল লক্ষ্যটি ছিল যখন ব্যবহারকারী কোনও ঘরে থাকবেন that এবং আমি কিছু পরিবর্তন করেছি। পুরো টেবিলটি লোড না করে এবং ব্যবহারকারীকে বিভ্রান্ত না করে আপনি কেবল সেলটি আপডেট করতে পারেন it এই কারণে, এই ফাংশনটি কাস্টম রিলোডডেটাসেল যুক্ত করে টেবিলভিউ বৈশিষ্ট্যগুলির সুবিধা গ্রহণ করে। এবং টেবিলভিউ যোগ করুন re কোথায়, আপনি কিছু পদক্ষেপ। এবং একবার আমি হয়ে গেলে, আমি সেই সমাধানটি আপনার সাথে ভাগ করে নিতে চাই।
ইরউন বি

আপনার উত্তরটি সম্পাদনা করে সমস্ত স্পষ্টতা যুক্ত করুন
নিকো হাজেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.