Передайте человека при создании объекта команды:
ICommand command = new DeletePersonCommand(person);
так, чтобы при выполнении команды это уже знало все, что это должно знать.
class DeletePersonCommand : ICommand
{
private Person person;
public DeletePersonCommand(Person person)
{
this.person = person;
}
public void Execute()
{
RealDelete(person);
}
}
I think that you forgot to add [super] calls to touchesBegan/touchesEnded/touchesMoved. Methods like
(BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
(BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
aren't working if you overriding touchesBegan / touchesEnded like this :
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"Touches Began");
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"Touches Moved");
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"Touches Ended");
}
But! All works fine if methods will be like :
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
NSLog(@"Touches Began");
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesMoved:touches withEvent:event];
NSLog(@"Touches Moved");
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
NSLog(@"Touches Ended");
}
Самый простой подход, который я часто использую, - это расширить UIControl, но использовать унаследованный метод addTarget для получения обратных вызовов для различных событий. Ключ состоит в том, чтобы прислушиваться к отправителю и событию, чтобы вы могли узнать больше информации о фактическом событии (например, место, где произошло событие).
Итак, просто создайте подкласс UIControl, а затем в init (убедитесь, что ваш initWithCoder также настроен, если вы используете перья), добавьте следующее:
[self addTarget:self action:@selector(buttonPressed:forEvent:) forControlEvents:UIControlEventTouchUpInside];
Конечно, вы можете выбрать любое из стандартных событий управления, включая UIControlEventAllTouchEvents. Обратите внимание, что в селектор будут переданы два объекта. Первый - это контроль. Вторая - это информация о мероприятии. Вот пример использования события касания для переключения кнопки в зависимости от того, нажимал ли пользователь слева и справа.
- (IBAction)buttonPressed:(id)sender forEvent:(UIEvent *)event
{
if (sender == self.someControl)
{
UITouch* touch = [[event allTouches] anyObject];
CGPoint p = [touch locationInView:self.someControl];
if (p.x < self. someControl.frame.size.width / 2.0)
{
// left side touch
}
else
{
// right side touch
}
}
}
Конечно, это для довольно упрощенных элементов управления, и вы можете достичь точки, когда это не даст вам достаточной функциональности,