سؤال

للحصول على اي فون, هل من الممكن تكوين UITableView وهذا من شأنه أن يسمح متعددة الاختيار ؟

لقد حاولت تجاوز -setSelected:animated: لكل UITableViewCell ، ولكن يحاول أن يتلاعب المطلوبة السلوك هو صعبة كما أنه من الصعب فصل حقيقي unselections من تلك التي UITableView يعتقد أنني غير محددة بسبب اختيار خلية أخرى!

آمل شخص يمكن أن تساعد!

شكرا

نيك.

هل كانت مفيدة؟

المحلول

وأفضل طريقة للقيام بذلك سيكون لعلامة في الصف المحدد.

ويمكنك القيام بذلك عن طريق تعيين accessoryType على الحالات UITableViewCell المحدد إلى UITableViewCelAccessoryCheckmark.

لإلغاء الصف، تعيينها إلى UITableViewCellAccessoryNone.

لتعداد الخلايا التي / تم اختيار الصفوف (مثلا، عند النقر على زر)، ببساطة تكرار عبر خلايا الجدول تبحث عن UITableViewCellAccessoryCheckmark. أو إدارة بعض NSSet أو ما شابه ذلك في جدول عرض مندوب في "لم تحديد" طرق مندوب.

نصائح أخرى

وبعد الملكية يجب أن تعمل بشكل جيد إذا كنت تقوم بتطوير التطبيق لiOS5.0 +

self.tableView.allowsMultipleSelection = YES;

استخدم التعليمات البرمجية التالية لإعداد أنواع الخلايا التبعي:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];


    if (thisCell.accessoryType == UITableViewCellAccessoryNone) {
        thisCell.accessoryType = UITableViewCellAccessoryCheckmark;

    }else{
        thisCell.accessoryType = UITableViewCellAccessoryNone;

    }
}

- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath {

//add your own code to set the cell accesory type.
return UITableViewCellAccessoryNone;
}

وجيف امارش لديه البرنامج التعليمي حول كيفية القيام بذلك هنا:

HTTP: //iphonedevelopment.blogspot. كوم / 2008/10 / طاولة للرؤية ومتعددة صف تحرير-mode.html

ولقد لم يحاكم رمز ولكن انها كانت على الجزء الخلفي من ذهني لفترة من الوقت، مع العلم سوف يأتي اليوم عندما كنت في حاجة إليها.

وأنا backported allowsMultipleSelectionDuringEditing وallowsMultipleSelection من نظام التشغيل iOS5 إلى دائرة الرقابة الداخلية القديمة. يمكنك مفترق ذلك في https://github.com/ud7/UDTableView-allowsMultipleSelection

وانها تراجع الغيار والشيء الوحيد الذي عليك القيام به هو تغيير UITableView إلى UDTableView (في التعليمات البرمجية أو واجهة البناء)

ومن HIG:

<اقتباس فقرة>   تقدم

وجهات النظر الجدول ردود الفعل عند اختيار المستخدمين عناصر القائمة. على وجه التحديد، عندما يمكن تحديد عنصر، و   الصف الذي يحتوي على عنصر الضوء لفترة وجيزة عندما يختار المستخدم لإظهار أن اختيار وقد وردت.   ثم، يحدث إجراءات فورية: وكشفت اما طريقة عرض جديدة أو يعرض صف علامة تشير إلى   هذا وقد تم اختيار هذا البند. الصف أبدا يبقى مميز، لمشاهدة الجدول لا يتم عرض ل   الحالة المحددة الثابتة.

وستحتاج للفة الخاصة متعددة أسلوب اختيارك، إما مع شيء من هذا القبيل البريد، أو باستخدام ملحق علامة الاختيار على خلايا الجسم.

والرجال لاختيار متعددة تحتاج فقط

self.tableView.allowsMultipleSelection = YES;

وعلى viewDidLoad و

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *tableViewCell = [tableView cellForRowAtIndexPath:indexPath];
    tableViewCell.accessoryView.hidden = NO; 
    // if you don't use custom image tableViewCell.accessoryType = UITableViewCellAccessoryCheckmark;
}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *tableViewCell = [tableView cellForRowAtIndexPath:indexPath];
    tableViewCell.accessoryView.hidden = YES;
    // if you don't use custom image tableViewCell.accessoryType = UITableViewCellAccessoryNone;
}

إذا كنت تحاول أن تفعل شيئا مثل البريد ومتعددة لتحديد (لحذف البريد، على سبيل المثال)، ثم ربما كنت ستكون لدينا لإدارة كل اختيار نفسك. متعددة اختيار الصف ليست شيئا هذا المعيار على اي فون. البريد يحل هذه باستخدام علامة في مربع والتي تشير إلى صفوف تم اختيارها.

أبرز

والأزرق التوالي كمؤشر على ما إذا كان الصف يتم تحديد يثبط في الواقع وفقا لفي HIG الصفحة 121. علامة في مربع سوف تفعل خدعة.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    int selectedRow = indexPath.row;
    cout << "selected Row: " << selectedRow << endl;
    UITableViewCell *indexPathForCell = [tableView cellForRowAtIndexPath:indexPath];
    if (indexPathForCell.accessoryType == UITableViewCellAccessoryNone) {
        indexPathForCell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        indexPathForCell.accessoryType = UITableViewCellAccessoryNone;
    }

}

ثم يضاف تنظيم أو كيف من أي وقت مضى كنت ترغب في تخزين بيانات التي تم اختيارها.

وكنت تبحث عن نفس القضية وإجابة لBhavin Chitroda نقوم sovled بشكل بالنسبة لي ولكن مع بعض بالإضافة إلى الحفاظ على علامة الاختيار كما كان أثناء التمرير.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        if ( [array indexOfObject:indexPath] == NSNotFound ) {
            [array addObject:indexPath];
            cell.accessoryType = UITableViewCellAccessoryCheckmark;
        } else {
            [array removeObject:indexPath];
            cell.accessoryType = UITableViewCellAccessoryNone;
        }

}

وبالإضافة إلى ذلك:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
// Your code here
.
.
.
    if ( [array indexOfObject:indexPath] == NSNotFound ) {
        cell.accessoryType = UITableViewCellAccessoryNone;
    } else {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }

    return cell;

}

ملاحظة:هذا لا يعمل في دائرة الرقابة الداخلية 4+.هذا هو القطاع الخاص ، لا يحملون وثائق ثابتة.لا تستخدم.

إذا كنت لا تخطط لتقديم التطبيق الخاص بك إلى متجر التطبيقات ، يمكنك استدعاء صف متعددة في وضع التحرير من خلال تنفيذ الطريقة التالية في UITableViewController مندوب:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 3; // Undocumented constant
}

واختبار مع iOS4.3 - 6.0

-(void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller {

    if ([controller.searchResultsTableView respondsToSelector:@selector(allowsMultipleSelectionDuringEditing)]) {
        controller.searchResultsTableView.allowsMultipleSelectionDuringEditing = YES;
    }
    else {
        controller.searchResultsTableView.allowsSelectionDuringEditing = YES;
    }
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellAccessoryCheckmark;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top