UITableViewCell custom cell using IB loading data

时间秒杀一切 提交于 2020-01-14 05:16:09

问题


From my other question; Using UITableViewCell in a UITableView I've used the IB to create a custom cell. Heres how my code is at the moment:

ViewRoutes (Original Table)

.h

@interface ViewRoutes : UIViewController {

    IBOutlet UITableView *tblRoute;
}

@property(nonatomic, retain) UITableView *tblRoute;

@end

.m

    #import "ViewRoutes.h"
#import "ViewRoutesCell.h"

@implementation ViewRoutes
@synthesize tblRoute;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}


- (NSInteger)
numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1;
}


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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell * aCell = [tableView dequeueReusableCellWithIdentifier:@"ViewRoutesCell"];
    if (aCell == nil)
    {


        NSArray *arr = [[NSBundle mainBundle] loadNibNamed:@"ViewRoutesCell" owner:self options:nil];

        for (NSObject *anObj in arr) {

            if([anObj isKindOfClass:[UITableViewCell class]]) {

                aCell = (UITableViewCell *)anObj;


            }
            return aCell;
        }
    }


}

and the .xib just has a UITableView on it.

The ViewRoutesCell (What I want to be the custom cell)

.h

#import <UIKit/UIKit.h>

@interface ViewRoutesCell : UITableViewCell {

    IBOutlet UITableViewCell *routesCell;
    NSMutableArray *arryRouteText;
    NSMutableArray *arryRouteImage;

    IBOutlet UILabel *lblRouteText;
    IBOutlet UILabel *lblRouteImage;

}

@property (nonatomic, retain) NSMutableArray *arryRouteText;
@property (nonatomic, retain) NSMutableArray *arryRouteImage;
@property (nonatomic, retain) UILabel *lblRouteText;
@property (nonatomic, retain) UILabel *lblRouteImage;

@end

The only thing i've done in the custom cell .m is synthesized the items

Then my custom cell xib i've got:

From here I get a little stuck, I can't work out how to set the two label properties from my ViewRoutes.m (they will be coming from xml eventually, but for now just a mutablearray)

Am I doing this the right way?

Tom

Edit Just to let you know i'm loading the image string to a label for now, will be an image later


回答1:


In the declaration of

UITableViewCell * aCell = [tableView dequeueReusableCellWithIdentifier:@"ViewRoutesCell"];

you're creating a UITableViewCell object. This does not know about your custom defined labels. You should change it to:

ViewRoutesCell * aCell = (ViewRoutesCell *)[tableView dequeueReusableCellWithIdentifier:@"ViewRoutesCell"];

Then, in the if clause, you should change

aCell = (UITableViewCell *)anObj;

to

aCell = (ViewRoutesCell *)anObj;

This will make the compiler recognize the object as being one of your specific cells, allowing you to access the label properties.

Hope this helps!




回答2:


There is no need of for loop replace your for loop by following code

acell.lblRouteText.text = [arryRouteText objectAtIndex:indexPath.row];
acell.lblRouteImage.text = [arryRouteImage objectAtIndex:indexPath.row];

return acell;

As you have put the return statement in For loop , it will always use the first object , and rest of the objects will never get a chance to get assigned.

And , you can not assign image to label , for that you will have to use UIImageView.




回答3:


As you have define property for UILabel, you must have @synthesized in ViewRoutesCell.m file.

Now, its easy to access properties of those labels.

In your cellForRowAtIndexPath, modify following part of code.

for (NSObject *anObj in arr) {
    if([anObj isKindOfClass:[ViewRoutesCell class]]) {
        aCell = (UITableViewCell *)anObj;
        aCell.lblRouteText.text = @"My Route Text"; 
        aCell.lblRouteImage.text = @"My Route Image";
     }
     return aCell;
}



回答4:


you should set ViewRoutesCell class to the IB cell as file's owner, and then you can link these property to IB file



来源:https://stackoverflow.com/questions/8241236/uitableviewcell-custom-cell-using-ib-loading-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!