ইউআইটিএবলভিউ মুছে ফেলার জন্য সোয়াইপ অক্ষম করে, তবে সম্পাদনা মোডে এখনও মুছতে পারে?


91

আমি অ্যালার্ম অ্যাপের মতো অনুরূপ কিছু চাই যেখানে আপনি সারিটি মুছতে সোয়াইপ করতে পারবেন না তবে আপনি সম্পাদনা মোডে সারিটি মুছতে পারেন।

যখন টেবিল ভিউ: কমিটএডিটিংস্টাইল: ফররোএন্ডেক্সপথ: মন্তব্যটি মুছে ফেলা হয়েছে, আমি মুছে ফেলার জন্য সোয়াইপটি অক্ষম করে দিয়েছিলাম এবং এখনও সম্পাদনা মোডে মুছুন বোতামটি ছিল, তবে আমি মুছুন বোতামটি টিপলে কী হয়। কী বলে?

উত্তর:


287

ঠিক আছে, দেখা যাচ্ছে এটি বেশ সহজ। এটি সমাধান করতে আমি এটিই করেছি:

উদ্দেশ্য গ

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Detemine if it's in editing mode
    if (self.tableView.editing)
    {
        return UITableViewCellEditingStyleDelete;
    }

    return UITableViewCellEditingStyleNone;
}

সুইফট 2

override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
    if tableView.editing {
         return .Delete
    }

    return .None
}

সুইফট 3

override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
    if tableView.isEditing {
        return .delete
    }

    return .none
}

tableView:commitEditingStyle:forRowAtIndexPath:মুছে ফেলার জন্য আপনাকে এখনও প্রয়োগ করতে হবে।


বিগ তারপর মুছে ফেলার জন্য সোয়াইপ আবার স্বয়ংক্রিয়ভাবে সক্ষম হয়। অথবা না?
ম্যাসিমো কাফেরো

না, মুছে ফেলার জন্য সোয়াইপ সক্ষম হয় না, যদি এটি সম্পাদনা মোডে না থাকে। এজন্য আমি ইউআইটিএবলভিউসেলইডিটিং স্টাইলনোনকে ডিফল্ট হিসাবে ফিরিয়ে দিই।
উইলি

4
ভুলে গেছেন উল্লেখ যে আপনার প্রয়োজন হলে (editingStyle == UITableViewCellEditingStyleDelete) commitEditingStyle মধ্যে:
উইলি

ঠিক আছে, এই বিবৃতি দিয়ে আপনি মুছে ফেলুন ক্রিয়া পেয়েছেন তবে এটির দৃষ্টিভঙ্গি আলাদা। সোয়াইপ সংস্করণটির একই দৃষ্টিভঙ্গি নিয়ে সেই অ্যাকশনটির কোনও সুযোগ আছে কি?
গোক্টু আরাল

@ gigusppe এটি কিছু যায় আসে না। সে স্ব সম্পর্কে ফিরে উল্লেখ করে ভুল নয়। সেই প্রতিনিধি পদ্ধতিটি আবার একই টেবিল ভিউতে উল্লেখ করছে যাতে সে ব্যবহার করতে ভাল হয় বা হয়ও।
স্টিফেন পল

9

কেবল বিষয়গুলি পরিষ্কার করার জন্য, tableView:commitEditingStyle:forRowAtIndexPath:প্রয়োগ না করা হলে সোয়াইপ-টু-মুছা সক্ষম হবে না ।

আমার বিকাশ চলাকালীন আমি এটিকে বাস্তবায়ন করিনি, এবং তাই সোয়াইপ-টু-মুছা সক্ষম করা হয়নি। অবশ্যই, একটি সমাপ্ত অ্যাপ্লিকেশনটিতে, এটি সর্বদা কার্যকর করা হবে, কারণ অন্যথায় কোনও সম্পাদনা হবে না।


4

সুইফ্ট সংস্করণ:

override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {

    if(do something){

        return UITableViewCellEditingStyle.Delete or UITableViewCellEditingStyle.Insert

    }
    return UITableViewCellEditingStyle.None

}

3

আপনার CanEditRowAt ফাংশনটি প্রয়োগ করতে হবে।

আপনি এডিটিংস্টাইল ফররো ফাংশনে ডিলিটটি ফিরিয়ে দিতে পারেন যাতে আপনি এখনও সম্পাদনা মোডে মুছতে পারেন।

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    if tableView.isEditing {
        return true
    }
    return false
}

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
    return .delete
}

2

মূলত, আপনি পদ্ধতিগুলি ব্যবহার করে সম্পাদনা সক্ষম বা অক্ষম করুন

- (void)setEditing:(BOOL)editing animated:(BOOL)animated

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

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

মুছে ফেলার অনুরোধ সম্পর্কে অবহিত করা হয়। আপনি যদি এই পদ্ধতিটি প্রয়োগ করেন তবে মুছে ফেলার জন্য সোয়াইপ স্বয়ংক্রিয়ভাবে সক্রিয় হয়ে উঠবে। আপনি যদি এই পদ্ধতিটি প্রয়োগ না করেন তবে মুছে ফেলার জন্য সোয়াইপ করা সক্রিয় নয়, তবে আপনি আসলে সারিটি মুছতে সক্ষম নন। অতএব, আমার জ্ঞানের সেরা হিসাবে, আপনি যে কোনও অনাবন্ধিত, প্রাইভেট এপিআই ব্যবহার না করে আপনি যা চেয়েছিলেন তা অর্জন করতে পারবেন না। সম্ভবত অ্যাপল অ্যাপ্লিকেশনটি এভাবে প্রয়োগ করা হয়।


4
আমি টেবিলভিউতে UITableViewCellEditingStyleDelete ফিরিয়ে এটিকে সমাধান করেছি: editStyleforRowAtIndexPath: যদি এটি সম্পাদনা মোডে থাকে।
উইলি

0

সি # তে:

আমার একই সমস্যা ছিল যেখানে সোয়াইপে অপসারণ মুছে ফেলা সহ সারিগুলি সক্ষম / অক্ষম করার প্রয়োজন হয়েছিল। একাধিক সারি বামদিকে সোয়াইপ করতে হবে এবং মুছতে হবে, সেগুলি অন্য রঙে রাখুন। আমি এই যুক্তি ব্যবহার করে অর্জন।

[Export("tableView:canEditRowAtIndexPath:")]
public bool CanEditRow(UITableView tableView, NSIndexPath indexPath)
{

    if (deletedIndexes.Contains(indexPath.Row)){
        return false;
    }
    else{
        return true;
    }

}

নোট করুন যে মুছে ফেলা ইনডেক্সগুলি সূচিগুলির তালিকা যা নকল ছাড়াই টেবিল থেকে মোছা হয়। এই কোডটি সারিটি মুছে ফেলা হয়েছে কিনা তা পরীক্ষা করে, তারপরে এটি সোয়াইপ বা বিপরীতে অক্ষম করে।

সমতুল্য প্রতিনিধি ফাংশন হ'ল সুইফ্ট canEditRowAtIndexPath


0

আমি হয় এই সমস্যাটি জুড়ে এসেছি এবং নীচের কোডগুলি দিয়ে ঠিক করেছি। আশা করি এটা তোমাকে সাহায্য করবে.

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {

    BOOL deleteBySwipe = NO;
    for (UIGestureRecognizer* g in tableView.gestureRecognizers) {
        if (g.state == UIGestureRecognizerStateEnded) {
            deleteBySwipe = YES;
            break;
        }
    }

    if (deleteBySwipe) {
        //this gesture may cause delete unintendedly
        return;
    }
    //do delete
}

}

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