كيف يمكنني تعديل مظهر الخلايا الفارغة في UITableView عادي؟

StackOverflow https://stackoverflow.com/questions/1022637

  •  06-07-2019
  •  | 
  •  

سؤال

إذا كان لديك عادي (وليس تجميعها) UITableView مع صف واحد، يتم تعبئة بقية الشاشة مع خلايا فارغة أو فارغة. كيف يمكنك تغيير مظهر من هذه الخلايا الفارغة؟ بالعربية لأول مرة، واعتقد انهم سوف يكون مظهر من الخلايا المستخدمة في عرض جدول ولكن يبدو أنها لا تفعل ذلك.

والناس من مدونة مثقف (الأمور) قد قاموا بعمل لطيفة تعديل هذه الخلايا ولكن لا أستطيع أن أفكر على الفور من وسيلة لتغيير مظهرها.

وأي نصائح؟

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

المحلول

وعلى الرغم من انها ليست تماما ما كنت تبحث عنه، يمكنك أيضا تغييره لعرض فقط منطقة فارغة (بدلا من الخلايا الفارغة) من خلال وضع رؤية تذييل على الطاولة. وهناك UIView من ارتفاع 0 تفعل خدعة.

نصائح أخرى

وبناء على الجواب samvermette، ولكن تعديلها لاستخدام صورة خلفية مباشرة بدلا من تكوين باستخدام صورة من فئة فرعية UITableViewCell. الجواب سام جيدة، لكنها ستكون أقل performant للمن مجرد خلق صورة خلفية مباشرة.

وإنشاء فئة فرعية UIView - في هذا المثال أسميتها CustomTiledView - وإضافة التعليمات البرمجية التالية إلى الفئة:

- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed:@"tableview_empty_cell_image"];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextScaleCTM (context, 1, -1); 
CGContextDrawTiledImage(context, 
                        CGRectMake(0, 0, rect.size.width, image.size.height), 
                        [image CGImage]); 
}

وإضافة التعليمات البرمجية التالية إلى tableviewcontroller الخاص بك:

- (CGFloat)tableView:(UITableView *)tableView 
           heightForFooterInSection:(NSInteger)section {
    // this can be any size, but it should be 1) multiple of the 
    // background image height so the last empty cell drawn
    // is not cut off, 2) tall enough that footer cells
    // cover the entire tableview height when the tableview
    // is empty, 3) tall enough that pulling up on an empty
    // tableview does not reveal the background.
        return BACKGROUND_IMAGE_HEIGHT * 9; // create 9 empty cells
}

- (UIView *)tableView:(UITableView *)tableView 
            viewForFooterInSection:(NSInteger)section {
    CustomTiledView *footerView = [[CustomTiledView alloc] init];
    return [footerView autorelease];
}

وأخيرا، ستحتاج إلى تعيين محتوى أقحم السفلي من tableview الخاص بك إلى سلبية من القيمة التي تم إرجاعها من -tableView:heightForFooterInsection: في هذا المثال سوف -1*BACKGROUND_IMAGE_HEIGHT*9 ذلك. يمكنك تعيين المحتوى أقحم القاع إما من المفتش حجم واجهة البناء أو عن طريق تعيين الخاصية self.tableView.contentInset من tableviewcontroller.

وهتاف!

وأنا وضعت فئة فرعية UIView ~ 300px عالية لآرائي رأس وتذييل tableView، وتعديل إدراجات tableView بحيث تعويض عن هذه الآراء (تعيين إدراجات العلوية والسفلية ل-300px).

وبلدي UIView فرعية تطبق طريقة drawRect، التي يمكنني استخدام CGContextDrawTiledImage() رسم UITableViewCell فارغة بشكل متكرر:

- (void)drawRect:(CGRect)rect {

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(300, 46),NO,0.0);
    emptyCell = [[SWTableViewCell alloc] initWithFrame:CGRectZero];
    [emptyCell drawRect:CGRectMake(0, 0, 300, 46)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    [emptyCell release];
    UIGraphicsEndImageContext();

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextScaleCTM (context, 1, -1); // this prevents the image from getting drawn upside-down
    CGContextDrawTiledImage(context, CGRectMake(0, 0, 300, 46), [newImage CGImage]);
}

في حالة بلادي بلادي tableviewcells هي 46px عالية، لذلك إذا كنت تريد جعل UIView فرعية لاحتواء 8 من هذه الخلايا الفارغة، ولست بحاجة لجعله 368px عالية.

http://jomnius.blogspot.com /2011/03/hide-uitableview-empty-cell-separator.html طريقة سهلة لتحديد هذا الجدول لا يوجد لديه خطوط الخلايا فاصل:

self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

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

وهناك طريقة أخرى لتعريف tableFooterView UITableView في فارغا:

UIView *footer =
    [[UIView alloc] initWithFrame:CGRectZero];
self.myTable.tableFooterView = footer;
[footer release];

إذا كنت تريد ببساطة لتغيير ارتفاع "الخلايا فارغة" عندما لا يكون هناك خلايا على الإطلاق في TableView الخاص بك: تحتاج إلى تعيين الخاصية rowHeight من UITableView الخاص بك (تنفيذ tableView:heightForRowAtIndexPath: ليس له تأثير على TableViews فارغ) . إذا كان هناك خلايا في TableView الخاص بك وأنت نفذت tableView:heightForRowAtIndexPath: ثم سيتم استخدام الماضي ارتفاع الصف للخلايا فارغة.

وسوف يكون على الارجح الى جعل فئة فرعية مخصصة من UITableView التي تملأ الخلفية مع ظهور الخلايا الفارغة.

- (void)drawRect:(CGRect)rect {
  [super drawRect: rect];

  // draw your background here if the rect intersects with the background area
}

وأعتقد أن نهج استخدام طريقة UITableView tableView:viewForFooterInSection: لن تعمل لحالة ما إذا كان الجدول فارغ، أي، مع عدم وجود الخلايا. في هذه الحالة، يمكنك استخدام تقنية Answerbot يمكن أغراض أخرى لالاشياء UIView تم إنشاؤها في طريقة العرض تذييل الجدول صراحة المقترحة، كما يلي:

    CGRect cellRect = CGRectMake(0, 0, table.bounds.size.width, table.bounds.size.height);
    CustomTiledView *footerView = [[[CustomTiledView alloc] initWithFrame:cellRect] autorelease];
    table.tableFooterView = footerView;

لسريع على 4.0 : ل

self.tableView.tableFooterView = UIView(frame: CGRect.zero)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top