2009-10-11 10 views
5

私は動詞訳をテーブルの最初のセルに表示する動詞結合アプリケーションを持っています。現在、翻訳リストは単なる文字列(コンマ区切りリスト)ですが、クリック可能なボタンに変更したいと思います。私はあまりにも多くの成功なしにセルビューにボタンを追加する周りの遊びがあったが、カスタムセルの私の唯一の経験は、特定の位置を使用しているので、セル内の動的なボタンのリスト(幅の変化)を達成する方法についてはわからない。uitableviewcell - iPhoneアプリにボタンを動的に追加

大変助かりました。

乾杯。

答えて

3

UIViewオブジェクトを作成します。この親ビューのサブビューとしてUIButtonオブジェクトを設定します。

これを取得したら、この親ビューをセルのcontentViewプロパティに追加できます。

-tableView:cellForRowAtIndexPath:デリゲートメソッドでは、セルのcontentViewに追加する前に、いくつかの条件付き状態に基づいて親ビュー(およびボタンの数と種類)を生成します。

プログラムでこれを行うには、条件が変わるとすぐに[tableView reloadData]などのメソッドを実行して、テーブルビューとそのセルを更新します。

4

はあなたが動的にボタンを作成しながら、セルの幅、高さなどの世話をする必要があります

-(CGRect)placeAButton:(NSString*)textFromField withCell:(UITableViewCell*)cell 
{ 
    CGSize  theSize; 
    CGSize  constraintSize; 

    // Create a button and add as subview to cell 
    // Get coordinates to place the button 

    UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 

    button.titleLabel.font    = [UIFont systemFontOfSize:MEDIUM_FONT_SIZE];; 
    button.titleLabel.lineBreakMode  = UILineBreakModeTailTruncation; 
    button.contentVerticalAlignment  = UIControlContentVerticalAlignmentCenter; 
    button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; 

    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [button setTitle:textFromField forState:UIControlStateNormal]; 

    UIImage *buttonBkground; 
    buttonBkground = [UIImage imageNamed:@"blueButton.png"]; 
    UIImage *newImage = [buttonBkground stretchableImageWithLeftCapWidth:12.0 topCapHeight:0.0]; 
    [button setBackgroundImage:newImage forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell.contentView addSubview:button]; 

[self.tableView reloadData] 
} 

を次の操作を実行します。

+0

を受けるであろうと同じクラスにご回答に感謝を別の関数を追加します。私はこれに1つの亀裂があったが、何も出現していなかった。私はチャンスを得たときにもう一度行くだろう、私は早く返信することができなかった(または私がまだ得ている問題を解決するのに十分な時間を費やすことができなかった)私はできるだけ早くそうしようとします。 – alan

4

新しいiPadアプリでこれをやったので、コードを貼り付けると思った。

// NOTE - This is within a loop  
// Add the translation as a button 
    UIButton *translationButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
    translationButton.backgroundColor = [UIColor clearColor]; 
    translationButton.titleLabel.font = [UIFont boldSystemFontOfSize:16]; 
    [translationButton setTitle:translation forState:UIControlStateNormal]; 
    [translationButton addTarget:self action:@selector(translationSearch:) forControlEvents:UIControlEventTouchUpInside]; 
    // Work out required size 
    fontSize = [translationButton.titleLabel.text sizeWithFont:translationButton.titleLabel.font];  
    CGRect buttonFrame = CGRectMake(xOffset, 15, fontSize.width + 20.0, 24); 
    [translationButton setFrame:buttonFrame]; 

    // Now set the new x Offset 
    xOffset = buttonFrame.origin.x + buttonFrame.size.width + 6.0; 

    [verbView addSubview:translationButton];  

乾杯。

+0

ボタンを区別するためのボタンのタイトルがなく、テキストがない場合は何ができますか?私の場合は、ボタンのタイトルの代わりにイメージを使用しています。そのような場合には何ができますか? –

+0

イメージを使用している場合は、イメージのサイズを知っていると仮定します。この場合は、定期的に配置するだけです。上記のコードでは、fontSize.widthを使ってオフセットを計算しています。あなたは単に画像の幅を使うことができます。 – alan

0

あなたはのViewController cellForRowAtIndexPath関数内にこれを行うことができます。

var btn = UIButton(frame: CGRectMake(100, 100, 100, 20)); 
    btn.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal); 
    btn.setTitle("My Button", forState:UIControlState.Normal); 
    btn.addTarget(self, action: "buttonTapped:", forControlEvents: UIControlEvents.TouchUpInside); 

    //add the buttons to the cell 
    cell.contentView.addSubview(btn) 

は、HIボタンタップイベント

func buttonTapped(sender: UIButton!) 
{ 
    println("Button Tapped") 
} 
+0

セルを上下に動かすと、上記のボタンが再び作り直されます。 –

+0

ボタンが存在するかどうかを確認した後、関数の外にボタンを作成し、セルに追加します。多くのセルがある場合は、ボタンのマップまたはインデックスを維持します。 – srinivas

関連する問題