0

私はobjective-cとiOSの初心者です

アウトレットを含むいくつかのカスタム テーブル セルを作成しました。しかし、正しい方法で使用しているかどうかはわかりません。

私がやりたいことは、テーブル ビュー コントローラーで定義された IBAction によって、カスタム セル内にあるアウトレットのプロパティを取得することです。

KolonNumberCell というカスタム テーブル セルと、その中に UISlider があります。UITableViewController で playNumbers という IBAction を定義したいと考えています。スライダーはカスタム セルで正常に動作しているようです。その値を取得できます。

しかし、playButton アウトレットがタップされたときに、このスライダーの値を取得する方法がわかりません。

どなたか情報提供や方法を教えていただけるとありがたいです。

前もって感謝します

TableController.h

#import <UIKit/UIKit.h>
@class KolonNumberCell;
@class BankoNumberCell;

@interface TableViewController : UITableViewController{
    NSArray *bundleArray;
    IBOutlet KolonNumberCell *kolonCell;
    IBOutlet BankoNumberCell *bankoCell;
    UIButton *playButton;
}

@property (strong) IBOutlet KolonNumberCell *kolonCell;
@property (strong) IBOutlet BankoNumberCell *bankoCell;
@property (nonatomic,retain) NSArray *bundleArray;
@property (nonatomic,retain) IBOutlet UIButton *playButton;

- (void)playNumbers:(id)sender;
@end

TableController.m の一部

#import "TableViewController.h"

@interface TableViewController ()

@end

@implementation TableViewController
@synthesize bundleArray,kolonCell,bankoCell,playButton;

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSArray *bundle1 = [[[NSBundle mainBundle] loadNibNamed:@"KolonNumberCell" owner:self options:nil] objectAtIndex:0];
    NSArray *bundle2 = [[[NSBundle mainBundle] loadNibNamed:@"BankoNumberCell" owner:self options:nil] objectAtIndex:0];

    bundleArray = [[NSArray alloc] initWithObjects:bundle1,bundle2, nil];

}

- (void)playNumbers:(id)sender
{

    NSLog(@"button");
    // Get the value of the slider in KolonNumberCell... but how?

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    tableView.allowsSelection = NO;

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [bundleArray objectAtIndex:indexPath.section];
    }

    return cell;

}
@end

私のcustomtableviewcell実装ファイルの1つ

#import "KolonNumberCell.h"

@implementation KolonNumberCell
@synthesize label,slider;


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    if (self) {
        // Initialization code

    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state

    self.backgroundView = [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"doubleRound.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:0.0]];
}



- (IBAction)sliderChanged:(id)sender
{
    [label setText:[NSString stringWithFormat:@"%i",(int)slider.value]];
}

+ (NSString *)reuseIdentifier {
    return @"Cell";
}


@end
4

1 に答える 1

0

セルが増えるとコードが非常に乱雑になるため、設計は奇妙です。Matt Gallagher は、Custom TableViews の優れた実装を提供しています。彼は TableViewCell をコントローラーとして使用しており、セルに関連するすべてのロジックをセル クラスに配置しています。Stack Overflow のディスカッション スレッド:

CustomTableViewController

それでも自分のやり方でやりたい場合:

  1. スライダーにタグを付けます: slider.tag = x//タグが一意であることを確認してください
  2. PlayNumbers では:

     UISlider *slider = (UISlider *)[[[bundleArray objectAtIndex:0] contentView] viewWithTag:x];
     NSLog(@"%i",(int)slider.value);
    

編集:構文を修正してくれてありがとう

于 2013-08-09T18:21:14.567 に答える