0

から継承するクラス内のsetFrameメソッドをオーバーライドしようとしています。この質問に対する答えとしてこのメ​​ソッドのオーバーライドを見つけましたが、オーバーライドを実装して機能させる方法がわかりません。UITableViewCellUITableViewController

実装したいオーバーライドは次のとおりです。

- (void)setFrame:(CGRect)frame {
    int inset = 1;
    frame.origin.x += inset;
    frame.size.width -= 2 * inset;
    [super setFrame:frame];
}

これは、オーバーライドを使用したいクラスです。

@interface PeopleTableViewController : UITableViewController 
{
}

@end

前の回答UITableViewCellは、メソッドをオーバーライドするためにサブクラス化することを示しています。これはどこで、どのように行うのですか? 前もって感謝します

編集:これはUITableViewCellが使用される場所です。

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                      reuseIdentifier:CellIdentifier];
    }

    // Configure the cell...
    //USE TO SET CELL IMAAGE BACKGROUND

    cell.backgroundView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"basketball.png"] 
                            stretchableImageWithLeftCapWidth:0.0 
                                                topCapHeight:5.0]];

    cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"basketball.png"] 
                                    stretchableImageWithLeftCapWidth:0.0 
                                                        topCapHeight:5.0]];

    [cell setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton];


    return cell;
}
4

2 に答える 2

0

ここでの主な問題は、UITableViewControllerサブクラスを見ていることです。サブクラス化UITableViewCellすると、いくつかのデフォルト メソッドの実装が得られます。setFrame次のように、実装のどこかにオーバーライドを追加するだけです。

#import "MyTableViewCellSubclass.h"

@implementation MyTableViewCellSubclass

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

// YOUR ADDED setFrame OVERRIDE
- (void)setFrame:(CGRect)frame {
    int inset = 1;
    frame.origin.x += inset;
    frame.size.width -= 2 * inset;
    [super setFrame:frame];
}

@end

考えるきっかけを与えるだけです。UIViewControllers にはフレームがありません。それらはビューを制御するだけです(したがって、「viewController」)。ビューにはフレームがあります。setFrameコントローラー クラスではなくビュー クラスにオーバーライドを配置する理由を理解するのに役立つことを願っています。

于 2013-07-30T16:06:13.667 に答える