如何将图像添加到uitableviewcell

Posted

技术标签:

【中文标题】如何将图像添加到uitableviewcell【英文标题】:How to add image to tableviewcell 【发布时间】:2017-07-26 03:48:04 【问题描述】:

对不起,这是一个新问题,但我搜索了一整天仍然找不到答案。当我运行该应用程序时,它仅显示带有标签和计数的行,但图像未显示在表格视图单元格上。

#import "ViewController.h"

@interface ViewController () <UITableViewDataSource,    UITableViewDelegate> 
NSMutableArray * imageNameArray;
//__weak IBOutlet UIImageView *cell;
__weak IBOutlet UITableView *Table;


@end

@implementation ViewController

- (void)viewDidLoad 
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a     nib.
[self arraySetup];






-(void) arraySetup 
imageNameArray = [NSMutableArray arrayWithArray:@[@"2.jpg"]];


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section 
return imageNameArray.count;



- (UITableViewCell *)tableView:(UITableView *)tableView  cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *cellId = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
//cell.imageView.image =  [UIImage imageNamed:imageNameArray [indexPath.row]];

if (cell == nil) 
    cell = [[UITableViewCell alloc]   initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];



cell.textLabel.text = imageNameArray [indexPath.row];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d", (int) indexPath.row + 1];

UIImageView *imv = [[UIImageView alloc]initWithFrame:CGRectMake(10,5, 50, 25)];
imv.image=[UIImage imageNamed:@"2.jpg"];
[cell.contentView addSubview:imv];
cell.imageView.image = imv.image;

return cell;

【问题讨论】:

我建议您制作自己的自定义单元格并从 xib 或情节提要中处理它,因为您在重复使用时在单元格中一遍又一遍地添加 UIImageView,这行 cell.imageView.image = imv.image; 也是不必要的,也许是你问题的根源 只需使用您在用户界面中创建的图像视图或添加子视图。 'UIImageView *imv = [[UIImageView alloc]initWithFrame:CGRectMake(10,5, 50, 25)]; imv.image=[UIImage imageNamed:@"2.jpg"]; [cell.contentView addSubview:imv];' 【参考方案1】:

这里有一些非常基本的代码供您学习: 我正在使用基础类UITableViewCell

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

    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    cell.textLabel.text = @"Your table row text";
    cell.imageView.image = [UIImage imageNamed:@"image.png"];// Here you specify your image
    cell.detailTextLabel.text = @"Your descriptive text";
    return cell;
 

【讨论】:

您好,我的代码中已经有这个,但它不起作用。 必须!弄错了。您尚未为 tableView 设置数据源和委托。在 UIViewController 中使用 tableView 时,需要为 tableView 设置数据源和委托。编辑了您的代码,请检查!【参考方案2】:

默认情况下,UITableViewCell 具有 UIImageView。试试这个:

- (UITableViewCell *)tableView:(UITableView *)tableView  cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *cellId = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];

if (cell == nil) 
    cell = [[UITableViewCell alloc]   initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];



cell.textLabel.text = imageNameArray [indexPath.row];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d", (int) indexPath.row + 1];

cell.imageView.image = [UIImage imageNamed:@"2.jpg"];
return cell;

另一种方法是使用您自己的自定义 TableViewCell。

【讨论】:

这对我不起作用。它只显示了 2.jpg 和 1。但图像从未出现过。 @ms_abc 您将图像添加到 bundle 或 xcassets 的位置?【参考方案3】:

在 ViewDidLoad 中添加数组:

arrayValue = [[ "userEmailType": "Home", "userImage": "image1.png"], [ "userEmailType": "Home", "userImage": "image2.png"], [ "userEmailType": "Work", "userImage": "image3.png"],]

自定义 UITableViewCell 代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell: CustomCell! = tableView.dequeueReusableCell(withIdentifier: "CustomCellIdentifier", for: indexPath) as! CustomCell
    // Static image
    cell.checkedImageObj!.image = UIImage.init(named: "resort_selected")   

    //Want round Image....  
    cell.contactImage.layer.cornerRadius = cell.contactImage.frame.size.width/2
    cell.contactImage.layer.masksToBounds = true

    // Set array of Image
    cell.contactImage.image = (arrayValue[indexPath.row] as! NSDictionary).value(forKey: "userImage") as? UIImage

请试一试....谢谢

【讨论】:

【参考方案4】:

您必须在单元格的 init 方法中初始化 imageView,例如:

if (cell == nil) 
    cell = [[UITableViewCell alloc]   initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
    UIImageView *imv = [[UIImageView alloc]initWithFrame:CGRectMake(10,5, 50, 25)];
    imv.tag = 10;
    [cell.contentView addSubview:imv];

你可以通过

设置图片
    cell.textLabel.text = imageNameArray [indexPath.row];
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%d", (int) indexPath.row + 1];
    UIImageView *imv = (UIImageView *)[cell.contentView viewWithTag:10];
    imv.image=[UIImage imageNamed:@"2.jpg"];
    return cell;

【讨论】:

您好,这对我不起作用。不过谢谢你的回复。【参考方案5】:

我知道这是很晚的回复,这些天只有少数人在使用 Objective C。下面为我工作。请注意,我正在重用相同的 tableView 来填充地址簿,并且在单击每个地址簿时会加载它的联系人。所以你可以删除 if 条件。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
static NSString *CellIdentifier = @"cells";
 UITableViewCell * cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   
 
    
    if (cell == nil) 
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        
                    
    
     if (_isPhoneBooksLoaded)
         cell.imageView.image =nil;
     
    
    if (_isContactsLoaded)
        
        cell.imageView.image = [UIImage imageNamed:@"contact_default.png"];
    
   
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
    
    
    return cell;

重要:

    不要忘记使用您设置的相同单元格标识符。

    如果条件是PhoneBooksLoaded,isContactsLoaded,则删除并保留

cell.imageView.image = [UIImage imageNamed:@"contact_default.png"];

    确保您使用正确的图像文件名并且它存在于您的资源中。

【讨论】:

以上是关于如何将图像添加到uitableviewcell的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像文件夹添加到 IKImageBrowserView

如何将图像添加到 JButton

如何将图像添加到 UIAlertView? [复制]

如何使用图像组件将图像动态添加到 Gatsby 中的页面?

如何将图像添加到存储在变量中的 QuickLook

如何将图像添加到电子邮件行为