您的位置:首页 > 移动开发 > IOS开发

需求 - 14 - "ShouldWillDid" - 1

2015-12-13 17:56 405 查看
<pre name="code" class="objc">- (BOOL)textViewShouldBeginEditing:(UITextView *)textView;
- (BOOL)textViewShouldEndEditing:(UITextView *)textView;

- (void)textViewDidBeginEditing:(UITextView *)textView;
- (void)textViewDidEndEditing:(UITextView *)textView;


我们常常能看到这样的Should Begin End  Will Did 状态性的一些函数方法。

这里给出一个用通知来实现的例子:

给出extern 全局 或者宏定义的一些变量定义,参照苹果原生的一些例子,如:

UIKIT_EXTERN NSString * const UITextViewTextDidBeginEditingNotification;
UIKIT_EXTERN NSString * const UITextViewTextDidChangeNotification;
UIKIT_EXTERN NSString * const UITextViewTextDidEndEditingNotification;


我们可以这样定义:

extern NSString *const KGModalWillShowNotification;
extern NSString *const KGModalDidShowNotification;
extern NSString *const KGModalWillHideNotification;
extern NSString *const KGModalDidHideNotification;

NSString *const KGModalWillShowNotification = @"KGModalWillShowNotification";
NSString *const KGModalDidShowNotification = @"KGModalDidShowNotification";
NSString *const KGModalWillHideNotification = @"KGModalWillHideNotification";
NSString *const KGModalDidHideNotification = @"KGModalDidHideNotification";


然后分别在实现这个操作前后发出通知,即可:

dispatch_async(dispatch_get_main_queue(), ^{

//Here
[[NSNotificationCenter defaultCenter] postNotificationName:KGModalWillShowNotification object:self];

[self.window makeKeyAndVisible];

if(animated){
viewController.styleView.alpha = 0;
[UIView animateWithDuration:kFadeInAnimationDuration animations:^{
viewController.styleView.alpha = 1;
}];

containerView.alpha = 0;
containerView.layer.shouldRasterize = YES;
containerView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.4, 0.4);
[UIView animateWithDuration:kTransformPart1AnimationDuration animations:^{
containerView.alpha = 1;
containerView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.1, 1.1);
} completion:^(BOOL finished) {
[UIView animateWithDuration:kTransformPart2AnimationDuration delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
containerView.alpha = 1;
containerView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 1);
} completion:^(BOOL finished2) {
containerView.layer.shouldRasterize = NO;

//Here.
[[NSNotificationCenter defaultCenter] postNotificationName:KGModalDidShowNotification object:self];

}];
}];
}
});


最后是实现的操作:

- (void)willShow:(NSNotification *)notification{
NSLog(@"will show");
}

- (void)didShow:(NSNotification *)notification{
NSLog(@"did show");
}


下一节会讲解delegate怎么来实现这种状态的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS