0
저는 블록 구문을 사용하고 아래의 문제에 직면했습니다. 아래 코드는 문제를 일으키는 클래스의 다른 정적 메서드를 호출합니다. 코드 아래에있는 막대의 다음 버튼 클릭에서 호출됩니다. 이 코드의 구문에 실수가 있습니까? 블록을 사용할 때 선택기에 대한 알려진 클래스 메서드가 없습니다.
-(BOOL) shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
if (![sender isKindOfClass:[UIBarButtonItem class] ]) {
return true;
}
// Trim the spaces
self.stewardsNameTextField.text = [self.stewardsNameTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
self.trackNameTextField.text = [self.trackNameTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
self.curatorNameTextField.text = [self.curatorNameTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
bool isValid =[JLTValidator validateFields: @[self.stewardsNameTextField, self.trackNameTextField, self.curatorNameTextField, self.weatherConditionSegment, self.trackConditionSegment] withScrollToCallback: ^(UIView * invalidField) // problem is here. Is this incorrect syntax?
{
if (invalidField == self.stewardsNameTextField || invalidField == self.trackNameTextField || invalidField == self.curatorNameTextField)
{
[invalidField becomeFirstResponder];
}
else
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
CGPoint top = CGPointMake(0, invalidField.frame.origin.y - 90);
[_scrollView setContentOffset:top animated:YES];
_scrollView.scrollIndicatorInsets=contentInsets;
}
if (!isValid) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sorry!" message:@"Please fill out the marked fields." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}
return isValid;
}];
}
정적 메소드의 정의
는 클래스에 호출되는 : 여기+(BOOL)validateFields:(NSArray *)fields
{
return [JLTValidator validateFields:fields withScrollToCallback:nil];
}
+(BOOL)validateFields:(NSArray *)fields andShouldDisplayMessage : (bool) shouldDisplayMessage
{
return [JLTValidator validateFields:fields withScrollToCallback:nil andShouldDisplayMessage:shouldDisplayMessage];
}
+(BOOL)validateFields:(NSArray *)fields withScrollToCallback : (void (^) (UIView *))scrollToCallback
{
return [JLTValidator validateFields:fields withScrollToCallback:scrollToCallback andShouldDisplayMessage:true];
}
+(BOOL)validateFields:(NSArray *)fields withScrollToCallback : (void (^) (UIView *))scrollToCallback andShouldDisplayMessage : (bool) shouldDisplayMessage
{
}
가 무슨 잘못? pls 가이드.
당신이 콜백으로 달성하려고하는거야? BOOL을 반환해야합니까? – Wain
wain .. 네, 맞습니다. 그것은 bool을 반환합니다. – LUI