1

tableViewとについての演習を行っていtableViewCellます。また、カスタム ビュー セルに問題があります。

tableViewCellと呼ばれる .xib ファイルを使用して独自のカスタムを作成しましnewCellView.xibた。.h ファイルと .m ファイルが必要で、スーパー クラスとしてUITableViewCell.

私のView Controllerでは、TableViewControllerこのようなデフォルトのセルを持つテーブルを作成していたときに呼び出されました。

- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
 UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

   cell.textLabel.text = [showNames objectAtIndex:[indexPath row]];
   cell.imageView.image = [UIImage imageNamed:[iconArray objectAtIndex:[indexPath row]]];

 return cell;
}

独自のカスタム ビューを作成したら、私はにインポートnewViewCell.hし、viewControllerこのようにコードを更新しました。

- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{

static NSString *newCellViewString = @"newCellView";

newCellView *cell = [tableView dequeueReusableCellWithIdentifier:newCellViewString];

 //newCellView *cell = [[newCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:newCellView];
if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"newCellView" owner:self options:nil];
    cell = (newCellView *)[nib objectAtIndex:0];
}

しかし、アプリを実行すると、関連するビューがないように、空白のページが表示されます。接続を追加するのを忘れたのかもしれません。表示する空のセルも表示されません。白い空白のページのみ。どんな助けでも素晴らしいでしょう。ありがとう。

他のファイルの編集

これが私の .h および .m ファイルです。

#import <UIKit/UIKit.h>

@interface newCellView : UITableViewCell <UITableViewDelegate>

@property (nonatomic, strong) IBOutlet UILabel *nameLabel;
@property (nonatomic, strong) IBOutlet UIImageView *iconImageView;
@property (retain, nonatomic) IBOutlet UIButton *extendButton;

@end

.m ファイル

#import "newCellView.h"

@implementation newCellView

@synthesize nameLabel;
@synthesize extendButton;
@synthesize iconImageView;

- (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
}

- (void)dealloc {
[extendButton release];
[nameLabel release];
[iconImageView release];
[super dealloc];
}
@end
4

4 に答える 4

4

カスタムセルを扱うとき、私は常にセルに関連するすべてのものを UITableViewCell サブクラス (NIB / アウトレット / .. を含む) にカプセル化し、tableView registerClass: forCellReuseIdentifier:メソッドを使用して、セルに使用するクラスをテーブルに伝えようとしています。

あなたの例では、次のことができます。

newCellView.m で、セルの init に nib の読み込みを追加します。

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    // Initialization code
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"newCellView" owner:self options:nil];
    self = [nib objectAtIndex:0];

}
return self;
}

すべてのコンセント接続が正しいことを確認してください。(つまり、Nib の UITableViewCell は NewCellView クラスです。)

次に、コントローラーの viewDidLoad で、セルに newCellView を使用するようにテーブルに指示します。

[yourTableView registerClass:[newCellView class] forCellReuseIdentifier:@"newCellView"];

最後に cellForRowAtIndexpath:

newCellView *cell = [tableView dequeueReusableCellWithIdentifier:@"newCellView"];

if (cell == nil)
{
    cell = [[NewCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"newCellView]";
}
于 2013-07-26T09:02:42.703 に答える
2

あなたの質問の問題は、カスタム セルがカスタム クラス セルに接続されていないことだと思います。UITableViewCellクラスを作成すると、一緒に xib は作成されません。次に、カスタム クラス ファイルに添付する必要がある xib ファイルを作成する必要があります。

内容のないEMPTY NIBファイルを作成します。次に、オブジェクトを介してuitablecustomcellを追加します。新しいオブジェクトを追加するときは、[ファイル インスペクター] に移動し、[ファイル名] にnewCellView という名前を入力し ます。これで、カスタム セルにEMPTY行が表示されます。

ここで、いくつかのビューをカスタム セルに追加し、.h ファイルで作成された IBOutlets (nameLabel、iconImageView、extendButton) を介してこれらのビューをアタッチます。

于 2013-07-26T10:56:12.423 に答える
0

これは以前に遭遇した単純なエラーです。タイプキャストするのを忘れました。そのはず:

cell = (newCellView*)[nib objectAtIndex:0];

これで問題が解決しない場合は、xib ファイルがデフォルトの「UITableViewCell」クラスではなく「newCellView」クラスを使用するように設定されていることを確認してください。また、テーブルビューを手動で作成し、それを別のビューのサブビューとして追加したり、loadView メソッドなどでビューとして設定した場合は、UITableViewController をサブクラス化するのではなく、テーブルビューのフレームを設定し、それをサブビュー。

newCellView.h クラスから を削除したい場合があります。テーブルビューのデリゲートは、ビューまたはビューのサブクラスであってはなりません。特に、テーブルビューが表示するセルではありません。UITableViewController はデリゲート メソッドを受け取る必要があります。

于 2013-07-26T07:35:17.760 に答える