私にとってこれに取り組む最良の方法は、UIViewを行として作成することです。単純に無地の線である場合は、背景ビューを使用し、それに応じてCGRectFrameを設定します。
位置などを処理せずにタッチイベントに反応するには、次のようにUIViewのinitメソッドでtouchEventを作成します。
UITapGestureRecognizer *onTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(lineClicked)];
[self addGestureRecognizer:onTap];
UIViewクラス内で関数を宣言します。
-(void)lineClicked {
//You can check some @property here to know what line was clicked for example
if (self.color == [UIColor blackColor])
//do something
else
//do another thing
// You can use a custom protocol to tell the ViewController that a click happened
(**) if ([self.delegate respondsToSelector:@selector(lineWasClicked:)]) {
[self.delegate lineWasClicked:self];
}
}
(**)行をクリックした後、viewControllerにロジックを配置することをお勧めします。これにアプローチする最良の方法は、CustomUIView.hファイルで@protocolを宣言し、パラメーターとしてselfを渡して、viewControllerが誰がクリックされたかを認識できるようにすることです。
@protocol LineClikedDelegate <NSObject>
@optional
- (void)lineWasClicked:(UIView *)line; //fired when clicking in the line
@end
最後に、CustomUIViewに@propertyを作成して、デリゲートをポイントします。
@property id<DisclosureDelegate> delegate;
そしてViewControllerで。UIViewとして行を作成する場合は、次のようにデリゲートを設定します。
blackLine.delegate = self.
- (void)lineWasClicked:(UIView *)line;
ViewControllerにメソッドを実装すると、設定が完了します。