زر حذف مخصص عند التحرير في خلية UitableView
-
06-07-2019 - |
سؤال
لقد مررت هذا السؤال هذا يوضح الرمز التالي:
-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
return @"Sagar";
}
ماذا لو أردت صورة مخصصة بدلاً من الزر الأحمر الافتراضي؟
المحلول
Luvieere على حق - إذا كنت تريد نفس الاستعارة "حذف" ، فأنت تريد الاحتفاظ بها في الزر الأحمر الذي توفره Apple. لماذا تغييره؟ يمكن التعرف عليها عالميا مثل اساسي لحذف الأزرار.
على الرغم من أنه إذا كنت تريد شيئًا مثل Tweetie ، فأين أنت تماما تغيير سلوك الضرب ، يمكنك استخدام شيء مثل AbtableViewCell حيث ترسم فقط في عرضك الخاص. قم بعمل طريقة عرض مخصصة ، والتجاوز -touchesbegan: withEvent: ، والتحقق من اللمسات. احسب دلتا اللمسات (في اللمسات: withEvent :) وحرك وجهة نظرك الخاصة حولها.
نصائح أخرى
تنفيذ هذه الطريقة في الخلية المخصصة
- (void)willTransitionToState:(UITableViewCellStateMask)state{
[super willTransitionToState:state];
if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask) {
for (UIView *subview in self.subviews) {
if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {
UIImageView *deleteBtn = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 64, 33)];
[deleteBtn setImage:[UIImage imageNamed:@"delete.png"]];
[[subview.subviews objectAtIndex:0] addSubview:deleteBtn];
[deleteBtn release];
}
}
}
}
هذا رد متأخر ولكن آمل أن يجد شخص ما هذا مفيدًا. لذا ، فإن الإجابة المقبولة تبدو معقدة بالنسبة لي ، و @user1684899 لا تعمل إجابة فقط إذا كنت تريد فقط تغيير مظهر الزر الحذف. أرغب في تغيير ظهور زر الحذف تمامًا (أي إطاره ، الموضع ، وما إلى ذلك) ، لذلك فإن الحل الخاص بي هو إضافة زر الحذف الخاص بي إلى خلية مخصصة وتبقيه مخفيًا في البداية ، وإظهاره فقط عندما تكون الخلية في وضع التحرير. والأهم من ذلك ، أريد إخفاء زر الحذف الأصلي من iOS ودعم التوافق الخلفي ، وهنا خدعة:
- (void)willTransitionToState:(UITableViewCellStateMask)state
{
[super willTransitionToState:state];
if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask)
{
if (!IS_IOS_7){
for (UIView *subview in self.subviews)
{
if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"])
{
// hide original button
[[subview.subviews objectAtIndex:0] setHidden:YES];
// show my custom button
[self.deleteButton setHidden:NO];
}
}
} else {
for (UIView *subview in self.subviews) {
for (UIView *subview2 in subview.subviews) {
if ([NSStringFromClass([subview2 class]) rangeOfString:@"Delete"].location != NSNotFound) {
// hide original button
[subview2 setHidden:YES];
// show my custom button
[self.deleteButton setHidden:NO];
}
}
}
}
} else {
// hide my custom button otherwise
[self.deleteButton setHidden:YES];
}
}
ولا تنسى أن تضيف:
[cell.deleteButton addTarget:self action:@selector(deleteEntryAtIndexPath:) forControlEvents:UIControlEventTouchUpInside];
في cellForRowAtIndexPath
, ، بحيث يمكنك إضافة أي شيء تريده عند النقر فوق الزر الحذف. ها هي نتيجتي:
إن معيار نظام النظام لعمل الغوص المقصود ، كما قلت في التعليق على إجابة Luvieere ، هو استخدام ملحق خلية الإفصاح التفصيلي (السهم الزرقاء) ، وليس لفتة التمرير.
ومع ذلك ، إذا كنت لا تزال ترغب في استخدام إجراء Swipe لهذا ، فلا توجد طريقة لتوفير الزر الخاص بك دون اعتراض يدويًا وإعادة تنظيم إيماءة التمرير تمامًا ، مثل ما تفعله Tweetie.