裏面,我實現了使用等觸摸事件,一個非常簡單的定製UISwitch:定製UISwitch一個UITableViewCell
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
我可以用我的看法這種控制沒有問題。控件模擬一個UISwitch,所以它可以通過拖動或點擊來改變數值。
我的問題是,我不能讓這個控制在UITableView的單元格內工作。只有一個水龍頭似乎工作(請注意,我沒有使用手勢......但我以前列出的事件),但我無法「滑動」開關手柄。
我實例化tableView:cellForRowAtIndexPath
方法添加控件作爲細胞contentView
的子視圖內的控制器:
[cell.contentView addSubview:customSwitch];
我想,這是一個事實,即UITableView的是一個UIScrollView相關的東西,我覺得倒是事件不知何故「被盜」了。
//編輯--------------------
這裏是與觸摸事件相關的代碼。
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
{
[super beginTrackingWithTouch:touch withEvent:event];
self.dragged = NO;
return YES;
}
- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
{
if (!self.enabled) {
return NO;
}
[super continueTrackingWithTouch:touch withEvent:event];
self.dragged = YES;
CGPoint touchPoint = [touch locationInView:self];
float centerPoint = FIXED_WIDTH/2.0;
[self centerOn:(touchPoint.x > centerPoint) animated:YES completion:nil];
return YES;
}
- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
{
[super endTrackingWithTouch:touch withEvent:event];
CGPoint touchPoint = [touch locationInView:self];
BOOL currentOn = self.on;
BOOL nextOn;
if (self.dragged) {
float centerPoint = FIXED_WIDTH/2.0;
nextOn = (touchPoint.x > centerPoint);
[self setOn:nextOn animated:NO];
}else{
nextOn = !self.on;
[self setOn:nextOn animated:YES];
}
self.dragged = NO;
if (currentOn != nextOn) {
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
}
如何使細胞內的控制工作,而用的UIScrollView/UITableView的干擾?
你有沒有考慮過使用輕拍和平移手勢? – Wain
@我更喜歡使用Touch事件。在這種情況下它有什麼不同嗎? – MatterGoal
看看像這樣的其他問題http://stackoverflow.com/questions/9350041/uicontrol-not-receiving-touches – Wain