4

カスタム UITableViewCell プロトタイプで UITable を作成しています。私のセルには、UIImageViews、UILabels、および UIButtons が含まれています。

ボタンを制御してクラスのインターフェイスにドラッグすると、問題なく動作します。ただし、コンセントには対応していません。

.h ファイルで IBOutlet を作成すると、セルではなく UITable を選択した場合にのみ接続でき、もちろん結果は壊れたアプリになります。

これを解決する方法はありますか?セルだけにカスタム クラスを使用したくありません。ストーリーボードとプロトタイプにこだわりたいです。

前もって感謝します

4

2 に答える 2

10

タグでラベルを使用すると、仕事は完了しますが、決して良い習慣ではありません...最良の方法は、UITableViewCellのカスタムクラスを作成することです.

つまり、選択

新規ファイル>ココアタッチ>Objective Cクラス

UITableViewCell のサブクラスとして作成すると、.h および .m ファイルが取得されます。

次のステップは、このセルのビューを作成することです

選択する

新しいファイル > ユーザー インターフェイス > 空

これをcustomcellクラスと同じ名前で作成します(「CustomCell」としましょう)

CustomCell.h、CustomCell.m、CustomCell.xib の3 つのファイルが作成されます。

xib ファイルを選択し、xib に UITableViewCell オブジェクトを追加し、そのカスタム クラスを「CustomCell」として設定します。

下の写真を見てください ここに画像の説明を入力

この後、任意のもの (UIImageView、UITextfield、UIButton) を下のビューにドラッグし、CustomClass にアウトレットを提供し、デリゲート メソッドを使用してアクションを管理できます。

imageView アウトレットを titleImage として持っている場合は、CellForRowAtIndex (TableView デリゲート メソッド) でセル オブジェクトを作成してイメージを設定することで、同じものにアクセスできます。

cell.titleImage=[UIImage ImageNamed:@"goo.png"]; 

ここでもう 1 つ言わなければならないことは、nib をロードするために CustomCell.m にも init メソッドを実装する必要があるということです>>

以下のコードのようになります。

    -(id)initWithDelegate:(id)parent reuseIdentifier:(NSString *)reuseIdentifier
    {
        
        if (self = [self initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier])
        {
            self=(CustomCell*)[[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil] lastObject];
        }
        
        self.backgroundColor = [UIColor clearColor];
        self.backgroundView = NULL;
        self.selectedBackgroundView =NULL;
            
//If you want any delegate methods and if cell have delegate protocol defined
self.delegate=parent;
    
//return cell
    return self;
    }

セルでボタンを使用している場合は、デリゲートを使用することをお勧めします

ボタンアクションメソッドでデリゲートメソッドを呼び出し(セルオブジェクトを渡す)、TableViewを使用してViewControllerにデリゲートを実装できるようにします

ここに例があります

ここに画像の説明を入力

UITableView のセルを使用してデータを入力できるようになりました... CustomCell.xib で reuseIdentifier 値を設定する必要はありません (CustomClass を設定するのと同じ)。

それを設定しましょう、うーん、他に「customCell」

そのため、tableView の使用にデータを入力する際に

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier=@"customCell";
    CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if(cell==nil)
         cell= [[CustomCell alloc] initWithDelegate:self reuseIdentifier:cellIdentifier];
       
//set cell properties
   cell.titleImage=[UIImage ImageNamed:@"title.png"];

    
    
    return cell;
}

また、デリゲート メソッドを追加することを忘れないでください

与える

ViewController:UIViewController<CustomCellDelegate>

ViewController の ViewController.h ファイルに

次に、その本体を ViewController.m (実装ファイル) に実装します。

なので

  -(void)cellButtonPressed:(CustomCell*)cell
    {
NSIndexPath *indexPathOfPressedCell = [self.tableView indexPathForCell:cell];
    NSLog(@"Pressed");
    }

これは長いメソッドのように見えますが、非常に便利で読みやすいです...

-------NB----------:

また、実装して CustomCell の高さを返します

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{}

発生する可能性があります....

于 2013-10-11T09:27:30.073 に答える
4

セルのカスタム UITableViewCell クラスを作成する必要があります。その後、cntrl + ドラッグだけでアウトレットを作成できます。それ以外の場合は、さらに簡単な方法があります。UIImageViews 、 UILabels などに 99343 、 99345 (重複を避けるため) などのタグを付けて、次のようにアクセスします。

  UILabel *myLabelFromPrototypeCell = (UILabel*)[cell.contentView viewWithTag:99343];
于 2013-10-11T06:58:42.903 に答える