いくつかの考え:
UITableViewCell
まず、ストーリーボードを使用すると、サブクラス化がさらに簡単になると思います。NIB をロードするためのコードは必要ありません。サブクラス化されたセルをその場で設計します。
次に、Quartz 2Dを使用して、セルの内側の境界線をプログラムで構成することを検討します。Quartz 2D には、破線、影などの機能があります。
基本的に、ユーザー インターフェイスはプログラムで微調整できます。したがって、QuartzCore.framework
プロジェクトに を追加し、セルの内側の境界線のサブクラスを作成します。おそらく次のようになります。
#import <QuartzCore/QuartzCore.h>
@interface CellInnerBorderView ()
@property (nonatomic, strong) CAShapeLayer *shapeLayer;
@end
@implementation CellInnerBorderView
// this adds shadow and border to the cell
- (void)configureBackgroundView
{
self.layer.shadowColor = [UIColor blackColor].CGColor;
self.layer.shadowRadius = 2.0;
self.layer.shadowOpacity = 0.8;
self.layer.shadowOffset = CGSizeMake(0.0, 2.0);
self.layer.borderColor = [UIColor blackColor].CGColor;
self.layer.borderWidth = 1.0;
}
// this adds a dashed line, half way down, inset by 5 points left and right
- (void)addDashedSeparator
{
UIBezierPath *path = [UIBezierPath bezierPath];
CGPoint startPoint = CGPointMake(5.0, self.frame.size.height / 2.0);
CGPoint endPoint = CGPointMake(self.frame.size.width - 10.0, self.frame.size.height / 2.0);
[path moveToPoint:startPoint];
[path addLineToPoint:endPoint];
if (self.shapeLayer)
[self.shapeLayer removeFromSuperlayer];
self.shapeLayer = [CAShapeLayer layer];
self.shapeLayer.path = path.CGPath;
self.shapeLayer.strokeColor = [UIColor blackColor].CGColor;
self.shapeLayer.lineDashPattern = @[@1, @1];
self.shapeLayer.fillColor = [UIColor blackColor].CGColor;
self.shapeLayer.lineWidth = 1.0;
self.shapeLayer.strokeStart = 0.0;
self.shapeLayer.strokeEnd = 1.0;
[self.layer addSublayer:self.shapeLayer];
}
- (void)layoutSubviews
{
[super layoutSubviews];
[self configureBackgroundView];
[self addDashedSeparator];
}
@end
UITableViewCell
次に、Interface Builder で内側の境界線を表すビューを追加し、そのクラスCellInnerBorderView
(または呼び出し方を選択したもの) を指定すると、この動作が得られます。