gpt4 book ai didi

iphone - UITextView 和 UIPickerView 都有自己的 UIToolbar

转载 作者:行者123 更新时间:2023-12-03 20:19:31 25 4
gpt4 key购买 nike

我喜欢在我自己的应用程序中复制 iPhone 上 Safari 的表单行为。如果您在 Web 表单中输入数据,您将在 UIKeyboardView 上方获得一个单独的 UIToolbar(上一个、下一个、完成)。选择选项也是如此:您会在 UIPickerView 上方获得相同的 UIToolbar。

我正在寻找演示/源代码/想法如何实现这一点。我会使用该工具栏和 TextView /选择器 View 创建自己的 subview 吗?有更优雅的方式吗?特别是利用 UITextfield 的 beginResponder 的东西?

最佳答案

所以我创建了一个 UIViewCOntroller 子类来管理它。

我编写了这个函数来添加。

-(void) addToViewWithAnimation:(UIView *) theView
{
UIView* myview = self.view;
CGRect frame = myview.frame;
frame.origin.y = 420;
myview.frame = frame;

UIView* bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)];
bgView.backgroundColor = [UIColor blackColor];
bgView.alpha = 0.6;
backgroundView = bgView;
[theView addSubview: bgView]; // this adds in the dark background

[theView addSubview:self.view]; // this adds in the pickerView with toolbar.
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
frame = myview.frame;
frame.origin.y = 420 - frame.size.height;
myview.frame = frame;

[UIView commitAnimations];
}

然后我在 IB 中创建了 View ,这是我的类标题最后的样子。 ( View 上还有一个 UItoolbar,我只是在我的 Controller 中没有引用它)

@interface PropertyPickerController : UIViewController {
IBOutlet UIPickerView* Picker;
IBOutlet UIButton* DoneButton;
IBOutlet UIButton* CancelButton;
UIView* backgroundView;
NSArray* SimpleObjects;
id PickerObjectDelegate;
SEL PickerObjectSelector;
}

然后隐藏我使用的 View 。

-(void) removeFromSuperviewWithAnimation
{

UIView* myview = self.view;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(AnimationDidStop:)];
[UIView setAnimationDuration:0.5];
// set fram below window.
CGRect frame = myview.frame;
frame.origin.y = 420;
myview.frame = frame;
backgroundView.alpha = 0; //fades shade to nothing
[UIView commitAnimations];
}

-(void) AnimationDidStop:(id) object
{
[self.view removeFromSuperview]; //removes view after animations.
[backgroundView removeFromSuperview];
}

最后但并非最不重要的一点是选择器的所有委托(delegate)函数。

    - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
FBSimpleObject* object = (FBSimpleObject*)[SimpleObjects objectAtIndex:row];
return object.Name;
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{ return 1;}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [SimpleObjects count];
}

- (IBAction)CancelButtonClick
{
[self removeFromSuperviewWithAnimation];
}
- (IBAction)DoneButtonClick
{
//This performs a selector when the done button is clicked, makes the controller more versatile.
if(PickerObjectDelegate && PickerObjectSelector)
{
NSMethodSignature* signature = [PickerObjectDelegate methodSignatureForSelector:PickerObjectSelector];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:PickerObjectDelegate];
[invocation setSelector:PickerObjectSelector];
[invocation setArgument:&object atIndex:2];
[invocation retainArguments];
[invocation invoke];
}
}

这就是工具栏的制作方法。基本上我使用与 ViewController 子类相同的概念,并且我不使用标准的推送 View 或模式显示选项。 (这里的示例实际上在键盘顶部放置了一个文本框和一个工具栏。

@interface BugEditCommentController : UIViewController { UITextView* 评论; UIToolbar* 工具栏;}-(void) addToViewWithAnimation:(UIView*) theView;

要激活此 View ,通常您可以调用 [objectbecomeFirstResponder];因此,如果将其添加到 View Controller 构造函数中,您所需要做的就是调用 [objectbecomeFirstResponder];

 NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(keyboardWillShow:) name: UIKeyboardWillShowNotification object:nil];
[nc addObserver:self selector:@selector(keyboardWillHide:) name: UIKeyboardWillHideNotification object:nil];

abd 如果您在 Controller 上实现此方法(在上面的代码中定义)

-(void) keyboardWillShow:(NSNotification *) note
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];

CGRect toolbarFrame = Toolbar.frame;
CGRect keyboardFrame;
CGPoint keyboardCenter;
[[note.userInfo valueForKey:UIKeyboardCenterEndUserInfoKey] getValue:&keyboardCenter];
[[note.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &keyboardFrame];

//CGRect toolbarRect = Toolbar.center;
toolbarFrame.origin.y= keyboardCenter.y - ((keyboardFrame.size.height/2) + (toolbarFrame.size.height));
Toolbar.frame = toolbarFrame;
[UIView commitAnimations];

}

-(void) keyboardWillHide:(id) object
{

//you could call [self removeFromSuperviewHere];
}

-(void) removeFromsuperViewWithAnimation
{
[Comment resignFirstResponder];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(AnimationDidStop:)];

CGRect frame = Toolbar.frame;
frame.origin.y = 480;
Toolbar.frame = frame;

[self.view viewWithTag:1].alpha = 0; //fade transparent black background to clear.
[UIView commitAnimations];

}
-(void)AnimationDidStop:(id) object
{
[self.view removeFromSuperview];
}

希望附加信息有帮助。

关于iphone - UITextView 和 UIPickerView 都有自己的 UIToolbar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/885002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com