我正在尝试覆盖从setFrame
继承的类中的UITableViewCell
UITableViewController
方法。我发现这个方法覆盖了this question的答案,但我不知道如何实现覆盖以使其工作。
以下是我要实现的覆盖:
- (void)setFrame:(CGRect)frame {
int inset = 1;
frame.origin.x += inset;
frame.size.width -= 2 * inset;
[super setFrame:frame];
}
这是我想在下面使用覆盖的类:
@interface PeopleTableViewController : UITableViewController
{
}
@end
previous answer表示继承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;
}
答案 0 :(得分:0)
您应该在UITableViewCell
子类中执行此操作,这是最简单,最安全的选项。
如果你想在视图控制器中出于某种原因(你可能会破坏很多东西),你需要使用方法调配(因为你想调用super
所以使用赢得的类别&#39 ;工作)。
答案 1 :(得分: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
只是为了给你一些思考的东西。 UIViewController
没有框架。他们只是控制视图(因此“viewController”)。视图有框架。希望这有助于您理解为什么我们将setFrame
覆盖放在视图类而不是控制器类中。