0

TableView で以下のコードを使用してカスタム セルを作成しようとしています。私は Objective C と iPhone の開発に 100% 慣れていないので、経験者とはほど遠い状態です。

次のコード: cell.label1 = [[UILabel alloc] initWithFrame:labelFrame]; それは言います(タイプ「UITableViewCell」のオブジェクトにプロパティ「label1」が見つかりません:

私は何を逃したのですか?関連するすべてのコードは以下にあります。助けてくれてありがとう / 初心者

BookmarksViewController.h

@interface BookmarksViewController : UITableViewController <UIAlertViewDelegate>
{
NSMutableArray *items;

UILabel *label1;
UILabel *label2;
UILabel *label3;


}
@property (nonatomic, retain) NSMutableArray *items;
@property (nonatomic, retain) UILabel *label1;
@property (nonatomic, retain) UILabel *label2;
@property (nonatomic, retain) UILabel *label3;

- (NSMutableArray*) getStoredItems;
- (void) clearItems;
- (void) removeItemWithId:(int)itemId;

@end

BookmarksViewController.m

#import "BookmarksViewController.h"

@interface BookmarksViewController ()

@end

@implementation BookmarksViewController

@synthesize items;
@synthesize label1 = _label1;
@synthesize label2 = _label2;
@synthesize label3 = _label3;



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

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

    CGRect labelFrame = cell.bounds;
    labelFrame.size.height= labelFrame.size.height * 0.5;

    cell.label1 = [[UILabel alloc] initWithFrame:labelFrame];

}
Bookmark *item = [self.items objectAtIndex:indexPath.row];

NSArray *chunks = [item.name componentsSeparatedByString: @","];

NSString *name;
NSString *book;
NSString *chapter;

if ([chunks count] > 0)
{
    name = [chunks objectAtIndex:0];
    if ([chunks count] > 1)
    {
        book = [chunks objectAtIndex:1];
        if ([chunks count] > 2)
        {
            chapter = [chunks objectAtIndex:2];
        }
    }
}

cell.label1.text = name;

return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 70; // height of tableView Cell
}
4

4 に答える 4

0

このコードを書いてください:

label1 = [[UILabel alloc] initWithFrame:labelFrame];
    [cell.contentView addSubview:label1];

それ以外のcell.label1 = [[UILabel alloc] initWithFrame:labelFrame];

そしてまたlabel1.text = name;代わりにcell.label1.text = name;

お役に立てればと思います。

于 2012-08-29T13:00:37.143 に答える
0
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *CellIdentifier = [NSString stringWithFormat:@"%d", indexPath.row] ;
    UILabel *lblTitle = nil;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        lblTitle =[[UILabel alloc]initWithFrame:CGRectMake(5, 0, 320, 44)];
        lblTitle.backgroundColor = [UIColor clearColor];
        lblTitle.font = [UIFont systemFontOfSize:14.0];
        lblTitle.tag = 1;

        UILabel *lblType =[[UILabel alloc]initWithFrame:CGRectMake(5, 20, 320, 44)];
        lblType.backgroundColor = [UIColor clearColor];
        lblType.font = [UIFont systemFontOfSize:14.0];
        lblType.tag = 2;

        UILabel *lblDate =[[UILabel alloc]initWithFrame:CGRectMake(5, 40, 320, 44)];
        lblDate.backgroundColor = [UIColor clearColor];
        lblDate.font = [UIFont systemFontOfSize:14.0];
        lblDate.tag = 3;

        UILabel *lblTime =[[UILabel alloc]initWithFrame:CGRectMake(155, 20, 320, 44)];
        lblTime.backgroundColor = [UIColor clearColor];
        lblTime.font = [UIFont systemFontOfSize:14.0];
        lblTime.tag = 4;

        [cell.contentView addSubview:lblTitle];
        [cell.contentView addSubview:lblType];
        [cell.contentView addSubview:lblDate];
        [cell.contentView addSubview:lblTime];

    }

    lblTitle = (UILabel*)[cell viewWithTag:1];


    [lblTitle setText:@""];



    UILabel *lblType = (UILabel *) [cell.contentView viewWithTag:2];
    [lblType setText:@""];

    UILabel *lblDate = (UILabel *) [cell.contentView viewWithTag:3];
    [lblDate setText:@""];
    return cell;
}
于 2012-08-29T12:56:05.400 に答える
0

セル自体には label1 プロパティがないため、セルにラベルを追加する必要があります。

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

    NSUInteger row = [indexPath row];

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    } else { // if there is already a subview, remove it
    while ([[cell.contentView subviews] count] > 0) {
        UIView *labelToClear = [[cell.contentView subviews] objectAtIndex:0];
    [labelToClear removeFromSuperview];
    }
    }

    UILabel *myLabel = [[[UILabel alloc] initWithFrame:CGRectMake(10, 5, 400, 30)] autorelease];

    // set up myLabel here

    [cell.contentView addSubview:myLabel];


    return cell;

}
于 2012-08-29T12:57:11.183 に答える
0

1. サブクラス UITableViewCell のカスタム クラス (.h および .m) を作成します。2.次に、ストーリーボードで、作成されたクラスとしてテーブルビューセルのクラス名を指定します。3. これで、セルを設計し、作成したカスタム クラスでコンセントを接続できます。4. また、ストーリーボードでセルの再利用識別子を指定することを忘れないでください。5. CellForRowAtIndexPath メソッドで、次のコードを記述する必要があります。

-

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


    YourCustomClass *cell = [tableView dequeueReusableCellWithIdentifier:@"YourReuseIdentifier"];
    if (cell == nil) {
        cell = [[YourCustomClass alloc] initWithStyle:UITableViewCellStyleDefault
                                  reuseIdentifier:@"YourReuseIdentifier"];
    }


cell.yourLabel.text = cell.cityNameLbl.text.capitalizedString;
return cell;

}

于 2014-01-06T13:21:00.980 に答える