![](/img/trans.png)
[英]Can I implement “select” and “copy” on UILabel when it has a long press just as UITextField (UITextView、UIWebView), and how?
[英]How can I Undo UITextField when i press a button?
我在按下按鈕時在創建UITextField時使用數組。 我想添加一個新按鈕,撤消功能。 當我按下“撤消”按鈕時,我創建的最后一個UITextField將被刪除。
在我的ViewController.h上
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController<UITextFieldDelegate>
{
NSMutableArray *textfieldform;
UITextField *textField1;
}
@property (nonatomic) NSInteger text1;
@property (nonatomic, retain) NSMutableArray *textfieldform;
@property (nonatomic, readwrite) int yOrigin;
@property (nonatomic, readwrite) int xOrigin;
-(IBAction) textFieldcreating;
-(IBAction) undo;
@end
在我的ViewController.m上
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize text1, textfieldform, yOrigin, xOrigin;
- (void)viewDidLoad
{
[super viewDidLoad];
//textfieldform = [[NSMutableArray alloc] init];
// Do any additional setup after loading the view, typically from a nib.
textfieldform = [NSMutableArray arrayWithCapacity:0];
yOrigin = 0;
xOrigin = 10;
}
-(IBAction)textFieldcreating{
textField1 = [[UITextField alloc] initWithFrame:CGRectMake(xOrigin, yOrigin, 100, 40)];
textField1.borderStyle = UITextBorderStyleRoundedRect;
textField1.font = [UIFont systemFontOfSize:15];
textField1.placeholder = @"enter text";
textField1.autocorrectionType = UITextAutocorrectionTypeNo;
textField1.keyboardType = UIKeyboardTypeDefault;
textField1.returnKeyType = UIReturnKeyDone;
textField1.clearButtonMode = UITextFieldViewModeWhileEditing;
textField1.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
textField1.delegate = self;
[textfieldform addObject:textField1];
[self.view addSubview:textField1];
yOrigin = yOrigin + 40 + 10;
xOrigin = xOrigin + 20 + 10;
//old yorigin + btn height + y offset
}
-(IBAction)undo{
if ([textfieldform count]>0) {
[textfieldform removeLastObject];
[textField1 removeFromSuperview];
}
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
NSLog(@"textFieldShouldBeginEditing");
return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
NSLog(@"textFieldDidBeginEditing");
[textField1 setBackgroundColor:[UIColor colorWithRed:(248/255.0) green:(248/255.0) blue:(255/255.0) alpha:1.0]];
textField1.borderStyle = UITextBorderStyleRoundedRect;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
NSLog(@"textFieldShouldEndEditing");
textField.backgroundColor = [UIColor clearColor];
return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField{
NSLog(@"textFieldDidEndEditing");
[textField1 setBackgroundColor:[UIColor clearColor]];
textField1.borderStyle = UITextBorderStyleNone;
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSLog(@"textField:shouldChangeCharactersInRange:replacementString:");
if ([string isEqualToString:@"#"]) {
return NO;
}
else {
return YES;
}
}
- (BOOL)textFieldShouldClear:(UITextField *)textField{
NSLog(@"textFieldShouldClear:");
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
NSLog(@"textFieldShouldReturn:");
if (textField.tag == 1) {
textField1 = (UITextField *)[self.view viewWithTag:2];
[textField1 becomeFirstResponder];
}
else {
[textField resignFirstResponder];
}
return YES;
}
@end
根據數組中每個文本字段的indexPath為其分配一個標簽。
-(IBAction)textFieldcreating{
UITextField *textField1 = [[UITextField alloc] initWithFrame:CGRectMake(xOrigin, yOrigin, 100, 40)];
textField1.borderStyle = UITextBorderStyleRoundedRect;
textField1.font = [UIFont systemFontOfSize:15];
textField1.placeholder = @"enter text";
textField1.autocorrectionType = UITextAutocorrectionTypeNo;
textField1.keyboardType = UIKeyboardTypeDefault;
textField1.returnKeyType = UIReturnKeyDone;
textField1.clearButtonMode = UITextFieldViewModeWhileEditing;
textField1.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
textField1.delegate = self;
textField1.tag = textfieldform.count;
[textfieldform addObject:textField1];
[self.view addSubview:textField1];
yOrigin = yOrigin + 40 + 10;
xOrigin = xOrigin + 20 + 10;
//old yorigin + btn height + y offset
}
比您的不定行為應該有類似
-(IBAction)undo{ //Should also check here if you actually have an object at that index path. (for example if there are no text fields created yet)
UITextField *textField = (UITextField *)[self.view viewWithTag:textfieldform.count - 1];
textField = nil;
[textField removeFromSuperview];
[textfieldform removeLastObject];
}
由於您將textFields添加到數組中,因此只需從該數組中獲取最后一個對象並將其從其超級視圖中刪除即可。
- (IBAction)undo:(id)sender {
UITextField *textFieldToRemove = [textfieldform lastObject];
if (textFieldToRemove) {
[textfieldform removeObject:textFieldToRemove];
[textFieldToRemove removeFromSuperview];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.