15

。を含むTimerCell.xibXIBファイルがあります。cellForRowAtIndexPathの他のクラスでは、これを初期化します。UITableViewCellUITableViewCell

    static NSString *CellIdentifier = @"cellTimer";
    TimerCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        //cell = [[TimerCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TimerCell"owner:self options:nil];
        cell = [nib objectAtIndex:0];

私のTimerCellには2UILabelつと1つありUIButtonます。このボタンでは、アクションを何らかのメソッドに設定したいと思います。

どうやってやるの?そして、最初UILabelに私のバックグラウンドカウントダウンタイマーからのデータをリアルタイムで表示する方法は?

4

4 に答える 4

26

このコードはあなたを助けます

static NSString *CellIdentifier = @"cellTimer";
TimerCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    //cell = [[TimerCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TimerCell"owner:self options:nil];
    cell = [nib objectAtIndex:0];
    UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.tag=indexPath.row;
   [button addTarget:self 
       action:@selector(aMethod:) forControlEvents:UIControlEventTouchDown];
   [button setTitle:@"cellButton" forState:UIControlStateNormal];
    button.frame = CGRectMake(80.0, 0.0, 160.0, 40.0);
    [cell.contentView addSubview:button];
   }

  return cell;
}


-(void)aMethod:(UIButton*)sender
{
 NSLog(@"I Clicked a button %d",sender.tag);
}

お役に立てれば!!!

于 2013-03-27T05:00:16.147 に答える
15

UITableViewCell名前付きのサブクラスがあるため、TimerCellアウトレットプロパティをに追加できますTimerCell。例えば:

@interface TimerCell : UITableViewCell

@property (nonatomic, strong) UIButton *button;
@property (nonatomic, strong) UILabel *label;

@end

TimerCell.xib、コンセントをボタンとラベルに接続します。

次に、でtableView:cellForRowAtIndexPath:、ボタンに簡単にアクセスして、ターゲットとアクションを設定できます。

static NSString *CellIdentifier = @"cellTimer";
TimerCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TimerCell"owner:self options:nil];
    cell = [nib objectAtIndex:0];
}

[cell.button addTarget:self action:@selector(cellButtonWasTapped:)
    forControlEvents:UIControlEventTouchUpInside];;

プロパティを使用してセルのラベルにアクセスしlabel、タイマーが起動したときにセルを更新できます。

この回答で説明したように、ボタンとラベルを取得する別の方法は、ビュータグを使用することです。

cellButtonWasTapped:またはボタンから送信するアクション)では、ボタンを含むセルのインデックスパスを検索することをお勧めします。私はこの答えでそれを行う方法を説明します。

于 2013-03-27T05:10:23.593 に答える
2
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"cellTimer";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];
    NSInteger index = indexPath.row;
    UILabel *titleLabel = (UILabel *)[cell viewWithTag:101];
    UIButton *button = (UIButton *)[cell viewWithTag:100];
    [button addTarget:self action:@selector(MethodName:) forControlEvents:UIControlEventTouchUpInside];
}

そして、XIBファイルTimerCell.xibにUIButtonとUILabelのタグを設定します

于 2013-03-27T08:58:32.093 に答える
-3

SOに投稿する前に、より良い調査を行ってください。ボタンをセルに追加するコードは次のとおりです

UIButton *Button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[Button addTarget:self action:@selector(MethodName:) forControlEvents:UIControlEventTouchUpInside];
[Button setTitle:@"ButtonTitle" forState:UIControlStateNormal];
Button.frame = CGRectMake(100.0, 10.0, 40.0, 40.0);
[cell.contentView addSubview:Button];
于 2013-03-27T05:08:21.337 に答える