массив таблиц - PullRequest
       8

массив таблиц

0 голосов
/ 28 августа 2009

Я делаю приложение для iphone, в котором у меня есть одно представление с названием dealviewcontroller, в этом представлении у меня есть представление таблицы в каждой строке, в которой я показываю 3 значения массива. Теперь проблема в том, что я должен показать значения этих массивов в следующем представлении в отдельной метке. если у кого-то есть какое-либо решение этого вопроса, оно будет высоко оценено. Спасибо заранее

Ответы [ 2 ]

0 голосов
/ 29 августа 2009

Предполагая, что я понимаю ваш вопрос, вы хотите, чтобы 3 значения из трех разных массивов отображались в строке.

Для этого вам нужно создать новый UITableViewCell класс. Выберите новый файл в своем проекте, выберите класс Objective-C и, наконец, выберите подкласс UITableViewCell . Нажмите следующую кнопку и назовите свой UITableViewCell .

альтернативный текст http://www.thoughtblog.com/images/UITableViewClass.png

Например, у меня есть класс UITableViewCell с именем RosterTableViewCell. Он имеет три (3) метки. В файле .h создайте 3 UILabels и реализуйте три (3) свойства.

@interface RosterTableViewCell : UITableViewCell {

    UILabel *playerName;
    UILabel *jerseyNumber;
    UILabel *position;
}

@property (nonatomic,retain) UILabel *playerName;
@property (nonatomic,retain) UILabel *jerseyNumber;
@property (nonatomic,retain) UILabel *position;

-(void)rosterPlayer:(NSString*)player JerseyNumber:(NSString*)jerseyNumber PlayerPosition:(NSString*)playerPosition;

@end

Теперь в файле .m нам нужно создать UILabels и расположить их там, где мы хотим.

@implementation RosterTableViewCell

@synthesize playerName;
@synthesize jerseyNumber;
@synthesize position;


- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {

    if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier]) {
        playerName = [[UILabel alloc]initWithFrame:CGRectMake(10,10,200,30)];
        [playerName setTextColor:[UIColor whiteColor]];
        [playerName setFont:[UIFont systemFontOfSize:19]];
        [[self contentView] addSubview:playerName];

        jerseyNumber = [[UILabel alloc]initWithFrame:CGRectMake(240,5,40,20)];
        [jerseyNumber setTextColor:[UIColor whiteColor]];
        [jerseyNumber setFont:[UIFont systemFontOfSize:16]];
        [[self contentView] addSubview:jerseyNumber];

        position = [[UILabel alloc]initWithFrame:CGRectMake(240,25,40,20)];
        [position setTextColor:[UIColor whiteColor]];
        [position setFont:[UIFont systemFontOfSize:16]];
        [[self contentView] addSubview:position];
    }
    return self;
}

- (void)rosterPlayer:(NSString*)player JerseyNumber:(NSString*)jerseyNumber PlayerPosition:(NSString*)playerPosition {

    [playerName setText:player];
    [playerName setNeedsDisplay];

    [jerseyNumber setText: jerseyNumber];
    [jerseyNumber setNeedsDisplay];

    [position setText: playerPosition];
    [position setNeedsDisplay];
}

Теперь в вашем коде, который создает TableView, вам нужно создать TableViewCell. Не забудьте импортировать класс, который мы создали выше, чтобы компилятор мог ссылаться на него.

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

    if (cell == nil) 
        cell = [[[RosterTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"RosterTableViewCell"] autorelease];

[cell rosterPlayer:[myArrayOfDealDetails objectAtIndex:[indexPath row]]     JerseyNumber:[myArrayOfDealDetails2 objectAtIndex:[indexPath row]] PlayerPosition:[myArrayOfDealDetails3 objectAtIndex:[indexPath row]]];

    return cell;
}

Я использовал три образца массива, которые вы передадите в функцию rosterPlayer. Это может показаться большим количеством кода, но большая часть его просто позиционируется.

0 голосов
/ 28 августа 2009

Создайте новый контроллер представления для следующего представления, что-то вроде DealDetailsViewController . Затем убедитесь, что у него есть свойство dealDetails, которое может хранить вашу структуру данных, например:

@property (nonatomic, retain) DealDetails *dealDetails;

Затем в вашей реализации UITableViewDelegate (возможно, DealsViewController) реализуйте tableView:didSelectRowAtIndexPath:, чтобы определить выбранную сделку и передать ее экземпляру DealDetailsViewController:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    // Determine the selected value using indexPath.section and/or indexPath.row

    DealDetails *dealDetails = [myArrayOfDealDetails objectAtIndex: indexPath.row];

    DealDetailsViewController *dealDetailsCtrl = [[DealDetailsViewController alloc] initWithNibName: @"DealDetailsViewController" bundle: nil];

    dealsDetailCtrl.dealDetails = dealDetails

    // Assuming you have a navigationController somewhere
    [someNavController pushViewController:dealDetailsCtrl]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...