来自 NSString 的 UITableViewCell 笔尖

Posted

技术标签:

【中文标题】来自 NSString 的 UITableViewCell 笔尖【英文标题】:UITableViewCell Nib From NSString 【发布时间】:2016-04-28 10:32:03 【问题描述】:

我正在尝试根据存储在我的数组中的信息更改将要使用的自定义单元格。我已经尝试了一切,但似乎无法让它在没有错误的情况下正常工作。该代码似乎不接受单元格笔尖的字符串输入。有没有其他方法可以做到这一点?下面附上我的代码。

谢谢。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath


    if([[Tutortrackinbud[indexPath.row] valueForKey:@"reply"]  isEqual: @"N"])
    
        nib = @"ReviewCell1";
    
    else
          nib = @"ReviewCell2";
    
    static NSString *simpleTableIdentifier = nib;



    ReviewCell1TableViewCell *cell = (ReviewCell1TableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil)

    

        NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:nib owner:self options:nil];

        cell = [nibArray objectAtIndex:0];

    
    if ([[Tutortrackinbud[indexPath.row] valueForKey:@"stars"]  isEqual: @"1"])
        NSLog(@"1");
        cell.star1.image = [UIImage imageNamed:@"star.png"];
        cell.star2.image = [UIImage imageNamed:@"greystar.png"];
        cell.star3.image = [UIImage imageNamed:@"greystar.png"];
        cell.star4.image = [UIImage imageNamed:@"greystar.png"];
        cell.star5.image = [UIImage imageNamed:@"greystar.png"];
        cell.star6.image = [UIImage imageNamed:@"greystar.png"];

    
    else if ([[Tutortrackinbud[indexPath.row] valueForKey:@"stars"]  isEqual: @"2"])
        NSLog(@"2");
        cell.star1.image = [UIImage imageNamed:@"star.png"];
        cell.star2.image = [UIImage imageNamed:@"star.png"];
        cell.star3.image = [UIImage imageNamed:@"greystar.png"];
        cell.star4.image = [UIImage imageNamed:@"greystar.png"];
        cell.star5.image = [UIImage imageNamed:@"greystar.png"];
        cell.star6.image = [UIImage imageNamed:@"greystar.png"];

    
    else if ([[Tutortrackinbud[indexPath.row] valueForKey:@"stars"]  isEqual: @"3"])
        NSLog(@"3");
        cell.star1.image = [UIImage imageNamed:@"star.png"];
        cell.star2.image = [UIImage imageNamed:@"star.png"];
        cell.star3.image = [UIImage imageNamed:@"star.png"];
        cell.star4.image = [UIImage imageNamed:@"greystar.png"];
        cell.star5.image = [UIImage imageNamed:@"greystar.png"];
        cell.star6.image = [UIImage imageNamed:@"greystar.png"];
    
    else if ([[Tutortrackinbud[indexPath.row] valueForKey:@"stars"]  isEqual: @"4"])
        NSLog(@"4");
        cell.star1.image = [UIImage imageNamed:@"star.png"];
        cell.star2.image = [UIImage imageNamed:@"star.png"];
        cell.star3.image = [UIImage imageNamed:@"star.png"];
        cell.star4.image = [UIImage imageNamed:@"star.png"];
        cell.star5.image = [UIImage imageNamed:@"greystar.png"];
        cell.star6.image = [UIImage imageNamed:@"greystar.png"];
    
    else if ([[Tutortrackinbud[indexPath.row] valueForKey:@"stars"]  isEqual: @"5"])
        NSLog(@"5");
        cell.star1.image = [UIImage imageNamed:@"star.png"];
        cell.star2.image = [UIImage imageNamed:@"star.png"];
        cell.star3.image = [UIImage imageNamed:@"star.png"];
        cell.star4.image = [UIImage imageNamed:@"star.png"];
        cell.star5.image = [UIImage imageNamed:@"star.png"];
        cell.star6.image = [UIImage imageNamed:@"greystar.png"];

    
    else if ([[Tutortrackinbud[indexPath.row] valueForKey:@"stars"]  isEqual: @"6"])
        NSLog(@"6");
        cell.star1.image = [UIImage imageNamed:@"star.png"];
        cell.star2.image = [UIImage imageNamed:@"star.png"];
        cell.star3.image = [UIImage imageNamed:@"star.png"];
        cell.star4.image = [UIImage imageNamed:@"star.png"];
        cell.star5.image = [UIImage imageNamed:@"star.png"];
        cell.star6.image = [UIImage imageNamed:@"star.png"];

    


    cell.reviewdate.text = [Tutortrackinbud[indexPath.row] valueForKey:@"date"];
    cell.reviewtext.text = [NSMutableString stringWithFormat:@"%@ -%@",[Tutortrackinbud[indexPath.row] valueForKey:@"desc"],[Tutortrackinbud[indexPath.row] valueForKey:@"username"]];

    //cell.tutortext.text = [NSMutableString stringWithFormat:@"%@ -%@",[Tutortrackinbud[indexPath.row] valueForKey:@"desc"],[Tutortrackinbud[indexPath.row] valueForKey:@"username"]];







    cell.tutortext.text = @"this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test this is test";






    return cell;


【问题讨论】:

***.com/questions/14303832/… - 可能会解决您的问题。 你遇到了什么错误? 【参考方案1】:

在我的项目中,我经常使用这样的类方法创建一个基本单元:

+ (NSString *)reuseIdentifier 
    return NSStringFromClass([self class]);


+ (UINib *)nibName 
    return [UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil];

所有其他单元格都继承自它,并在需要的地方以这种方式使用它:

 [self.tableView registerNib:[UINib nibWithNibName:[FeedCell nibName] bundle:nil] forCellReuseIdentifier:[FeedCell reuseIdentifier]];

希望对你有帮助)

【讨论】:

【参考方案2】:

您最好在viewDidLoad 中注册您的 nib 文件

示例代码:

UINib *cellNib = [UINib nibWithNibName:@"MyCustomCell" bundle:nil];
[self.tableView registerNib:self.cellNib forCellReuseIdentifier:@"CustomCell"];

然后像你已经做的那样正常使用dequeueReusableCellWithIdentifier。您可以使用不同的标识符注册多个 nib 文件,然后使用它们的唯一标识符将它们从 cellForRowAtIndexPath 中出列。

【讨论】:

【参考方案3】:

我建议,而不是多个xib 文件,您需要创建单个xib 文件,然后从NSArray 获取对象。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *simpleTableIdentifier = nib;

    ReviewCell1TableViewCell *cell = (ReviewCell1TableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil)
        NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:nib owner:self options:nil];

         if([[Tutortrackinbud[indexPath.row] valueForKey:@"reply"]  isEqual: @"N"])
               cell = [nibArray objectAtIndex:0];
         else
              cell = [nibArray objectAtIndex:1];
         
    


    return cell;

【讨论】:

以上是关于来自 NSString 的 UITableViewCell 笔尖的主要内容,如果未能解决你的问题,请参考以下文章

当我使用 NSPredicate 为我的 UITableView 过滤我的数组时,应用程序崩溃

在分组的 UITableView 中搜索

更改 UItableViewCell 中的 UILabel 文本颜色

iOS - UITableView中有两种重用Cell的方法

为啥来自 NSString 分配的 NSDecimalNumber 会失败?

来自 NSString 的 Objective-C 标识符