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

您应该在UITableViewCell子类中执行此操作,这是最简单和最安全的选择。

如果您出于某种原因想在视图控制器中执行此操作(您可能会破坏许多事情),您需要使用方法调配(因为您想调用super所以使用类别不起作用)。

于 2013-07-30T16:03:09.510 回答
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 回答