【问题标题】:Reverse array content?反转数组内容?
【发布时间】:2013-04-17 06:52:00
【问题描述】:

我正在用信息填充表格视图,但希望它反向填充,以便任何新添加的单元格(新电子邮件)都会出现在顶部,而不是底部。

我做错了什么?

    - (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"MailCell";

    MailCell *cell = (MailCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MailCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];

        // SLICK
        // Anything that should be the same on EACH cell should be here.

        UIView *myBackView = [[UIView alloc] initWithFrame:cell.frame];
        myBackView.backgroundColor = [UIColor colorWithRed:15.0/255.0 green:140.0/255.0 blue:198.0/255.0 alpha:1];
        cell.selectedBackgroundView = myBackView;

        cell.selectionStyle = UITableViewCellSelectionStyleGray;
        cell.messageText.textAlignment = NSTextAlignmentLeft;
        cell.messageText.lineBreakMode = NSLineBreakByTruncatingTail;
    }

    NSUInteger row = [indexPath row];

    // Extract Data

    // Use the message object instead of the multiple arrays.

    CTCoreMessage *message = [[self allMessages] objectAtIndex:row];

    // Sender

    CTCoreAddress *sender = [message sender];
    NSString *senderName = [sender name];

    // Subject

    NSString *subject = [message subject];
    if ([subject length] == 0)
    {
        subject = @"(No Subject)";
    }

    // Body

    BOOL isPlain = YES;
    NSString *body = [message bodyPreferringPlainText:&isPlain];
    body = [body stringByReplacingOccurrencesOfString:@"\n" withString:@" "];
    body = [body stringByReplacingOccurrencesOfString:@"\r" withString:@" "];

    // Populate Cell

    [[cell nameText] setText:senderName];
    [[cell subjectField] setText:subject];
    [[cell messageText] setText:body];

    if ([message isUnread])
    {
        UIColor *myColor = [UIColor colorWithRed:15.0/255.0 green:140.0/255.0 blue:198.0/255.0 alpha:1.0];
        cell.nameText.textColor = myColor;
    }
    else
    {
        cell.nameText.textColor = [UIColor blackColor];
    }

    return cell;

}

我是如何加载数组的:

- (NSMutableArray *)allMessages
{
    if (_allMessages == nil)
    {
        _allMessages = [[NSMutableArray alloc] init];
    }
    return _allMessages;
}

【问题讨论】:

    标签: iphone arrays sdk reverse mailcore


    【解决方案1】:

    您正在从 NSArray 索引[indexPath row] 中拉取,这意味着您从索引 0 开始并转到 n。这意味着您的顺序不是相反的。你需要先反转你的数组。一个简单的方法是:

    - (void)viewWillAppear:(BOOL)animated
    {
        NSArray *allMessages = [self allMessages];
        NSArray* reversedMessages = [[allMessages reverseObjectEnumerator] allObjects];
    }
    

    然后在你的cellForRowAtIndexPath 方法中你可以这样做:

    CTCoreMessage *message = [reversedMessages objectAtIndex:row];
    

    【讨论】:

    • 感谢您的回答,能否将该代码发布到我现有的代码中,因为我不完全知道从该数组中提取什么。如果你愿意,只需告诉我放在哪里(或替换什么),我会将其标记为答案。谢谢!
    • 您需要在 cellForRowAtIndexPath 方法之外执行此操作,这样就不会在每次加载单元格时都发生这种情况,也许在您的 viewWillAppear 中。你会想用你的 allMessages 数组来做,检查编辑。
    • 好的,我告诉你的,你需要把它放在 NSArray 而不是 NSMutableArray 中,但是在你反转它之后可以把它放回 MuteableArray。
    • 问题,其他的也没有颠倒过来,比如主题等等。有什么想法吗?
    • 您必须对所有数据数组执行相同的过程以保持正确的顺序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多