1

各行に4つのボタンがあり、すべてのボタンの名前が「W」であるuitableViewがあります。

プログラムを実行すると、最初の行の最初の4つのボタンに「W」が表示されます。

テーブルをスクロールすると、ボタン名「W」が増えます。

誰かが問題が何であるか知っていますか?

前もって感謝します

私のコード:

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

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithFrame:CGRectZero];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;

int column = 4;
for (int i=0; i<column; i++) {

    // position in the parent view and set the size of the button
    UIButton *myButton = [[UIButton alloc]initWithFrame:CGRectMake(0.5+83*i,10, 80,115)];
    myButton.tag=(column*indexPath.row)+i;
    [cell.contentView addSubview:myButton];
    [myButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    myButton.backgroundColor = [UIColor whiteColor];


    UILabel *btnTitle = [[UILabel alloc] initWithFrame:CGRectMake(25, 10, 30, 10)];
    [btnTitle setText:@"W"];
    [btnTitle setTextColor:[UIColor blackColor]];
    [myButton addSubview:btnTitle];

           }
return cell;
}

ここに画像の説明を入力してください

4

3 に答える 3

2

アビゼムは言った。「セルには多くのボタンがあります...そしてbtnTitles」彼は正しいです。

テーブルビューをスクロールしている間、コードは「メモリ不足」と「遅い」を呼び出します。

CustomTableViewCell クラスを作成します。


@interface CustomTableViewCell : UITableViewCell
{
    NSArray *_buttons;
}
@property (nonatomic, strong) IBOutlet UIButton *button1, button2, button3, button4;
@property (nonatomic, strong, readonly) NSArray *buttons;
@end

@implementation CustomTableViewCell
...
@dynamic buttons;
- (NSArray*)buttons
{
   if (_buttons == nil) {
       _buttons = [NSArray arrayWithObjects:self.button1, self.button2, self.button3, self.button4, nil];
   }
   return _buttons; // I fixed it _button --> _buttons
}
@end

  • 空の xib ファイルを作成します。
  • UITableViewCell をドラッグ アンド ドロップします。
  • UITableViewCell に 4 つの UIButton をドラッグ アンド ドロップします。
  • UITableViewCell カスタム クラスを選択して CustomTableViewCell に変更します。
  • button1、button2、button3、button4 を xibs アイテムにリンクします。

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

CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = (CustomTableViewCell*)[[[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:self options:nil] objectAtIndex:0];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
int column = 4;
for (int i=0; i<column; i++) {
    // position in the parent view and set the size of the button
    UIButton *myButton = [cell.buttons objectAtIndex:i];
    //myButton.frame = CGRectMake(0.5+83*i,10, 80,115); You can design on interface builder
    myButton.tag=(column*indexPath.row)+i;
    [cell.contentView addSubview:myButton];
    [myButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    myButton.backgroundColor = [UIColor whiteColor];

    //myButton.textLabel.frame = CGRectMake(25, 10, 30, 10); You can design on interface builder
    [myButton.textLabel. setText:@"W"];
    [myButton.textLabel. setTextColor:[UIColor blackColor]];
 }
return cell;
}

  • ごめん。「に」ではない --> 「なし」
  • return _button --> return _buttons

@interface CustomTableViewCell : UITableViewCell
{
    NSArray *_buttons;
}
@property (nonatomic, strong) IBOutlet UIButton *button1, button2, button3, button4;
@property (nonatomic, strong, readonly) NSArray *buttons; // <----- Check it.
@end
于 2012-08-02T07:59:36.283 に答える
1

回答にコメントできないため、この回答を変更しました ボイルジョンの解決策は正しいものです。booiljoungさんの投稿なので、絵コンテで簡単に使えます。まず、ストーリーボードで UITableViewCell をカスタマイズする必要があります。UITableView の最初の行は UITableViewCell です (UITableView をストーリーボードに追加するときに削除していない場合)。次に、4 つのボタンを追加し、そのクラスを CustomUITableViewCell に設定します。ボタンを CustomUITableViewCell にリンクします。最も重要なことは、 Identifierをコード tableview dequeueReusableCellWithIdentifier で使用したものに変更することを忘れないことです。私がアップロードしたスクリーンショットをご覧ください。そして、コードのエラーはタイプミスが原因であり、 ni は ni lであり、_button は _buttons である必要があります ストーリーボードのカスタム UITableViewCell

古い回答 ボタンの作成は、セルが nil の場合にのみ行う必要があります。セルが nil でない場合は、ボタンで作成した「古い」セルをtableview が再利用していることを意味します。dequeueReusableCellWithIdentifier を呼び出すと、可能であれば常にセルが再利用されます。たとえば、現在の画面にないセルを使用します。すでに「W」という名前のボタンが 4 つあります。したがって、新しく入ってくるセルには、スクロールするたびに 4 つのボタンが追加されます。ボタン作成コードをコードブラケットに移動できます if ( cell == nil ) {...}

しかし、新しい行にスクロールするときにボタンのタイトルを操作するのは困難です。UITableViewCell を独自にカスタマイズすることをお勧めします。http://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7-SW18からリファレンスを見つけることができます。

于 2012-08-02T07:50:55.440 に答える
0

以下の貼り付けたコードからボタンを作成したため

if (cell == nil) { cell = [[UITableViewCell alloc] initWithFrame:CGRectZero]; }

そのコード行をコピーして、コード行の下に貼り付けることができます

cell = [[UITableViewCell alloc] initWithFrame:CGRectZero];

ボタンのタイトルを

[myButton setTitle:@"Somethig" forState:UIControlStateNormal];

これにより、メモリも節約できます

于 2012-08-02T08:11:02.713 に答える