【问题标题】:Resign keyboard immediately after button press按下按钮后立即退出键盘
【发布时间】:2011-08-12 18:13:56
【问题描述】:

我有一个按钮“getResponse”,在您将 IP 地址输入 UITextField 后,它会向服务器发出 XMLRPC 调用。我喜欢“getResponse”按钮首先退出键盘,如果它启动然后调用服务器。

现在,如果键盘启动,它将调用服务器,如果没有找到有效的服务器,则检索信息或错误,然后退出键盘。

我知道这可能很容易,但我一生都无法弄清楚。任何帮助都会很棒,谢谢!

代码:

h.

    #import <UIKit/UIKit.h>
#import "XMLRPCResponse.h"
#import "XMLRPCRequest.h"
#import "XMLRPCConnection.h"


@interface SecondViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate, UITextFieldDelegate> {
    IBOutlet UILabel *helloResponse;
    IBOutlet UILabel *SumCountsResponse;
    IBOutlet UITextField *serverInput;
    IBOutlet UIPickerView *pickerView;
    IBOutlet UILabel *pickerTrap;
    IBOutlet UIAlertView *alert;

    NSMutableArray * pickerViewArray;

    int trapSelected;

}

@property(nonatomic,retain) IBOutlet UILabel *helloResponse; 
@property(nonatomic,retain) IBOutlet UILabel *SumCountsResponse;
@property(nonatomic,retain) IBOutlet UITextField *serverInput;
@property(nonatomic,retain) IBOutlet UIPickerView *pickerView;
@property(nonatomic,retain) IBOutlet UILabel *pickerTrap;
@property(nonatomic,retain) IBOutlet UIAlertView *alert;



- (IBAction)getResponse:(id)sender;
- (IBAction)serverInputReturn:(id)sender;
- (IBAction)backgroundTouched:(id)sender;


@end

米。

#import "SecondViewController.h"

@implementation SecondViewController

@synthesize helloResponse;
@synthesize SumCountsResponse;
@synthesize serverInput;
@synthesize pickerView;
@synthesize pickerTrap;
@synthesize alert;


-(IBAction)serverInputReturn:(id)sender { //resign keyboard on 'return' button

    [sender resignFirstResponder];

}

-(IBAction)backgroundTouched:(id)sender { //resign keyboard on background touch

    [serverInput resignFirstResponder];
}


-(IBAction)getResponse: (id) sender {

    [self serverInputReturn:self]; //trying to call method to resign keyboard first 

    //setup IP call for XMLserver
    NSString *server = serverInput.text;
    NSString *http = @"http://";
    server = [server stringByAppendingString:@":8080/RPC2"];
    server = [http stringByAppendingString:server];

    //Begin calls to XMLRPC server for data return
    XMLRPCRequest *requestHello = [[XMLRPCRequest alloc] initWithHost:[NSURL URLWithString:server]];
    [requestHello setMethod:@"hello" withObjects:[NSArray arrayWithObjects: nil]];
    NSString *resultHello = [self executeXMLRPCRequest:requestHello];
    [requestHello release];


    XMLRPCRequest *requestSumCounts = [[XMLRPCRequest alloc] initWithHost:[NSURL URLWithString:server]];
    [requestSumCounts setMethod:@"SumCountsString" withObjects:[NSArray arrayWithObjects: nil]];
    NSString *resultSumCounts = [self executeXMLRPCRequest:requestSumCounts];
    [requestSumCounts release];


    XMLRPCRequest *requestTrapCountX = [[XMLRPCRequest alloc] initWithHost:[NSURL URLWithString:server]];
    [requestTrapCountX setMethod:@"TrapCountString" withObjects:[NSArray arrayWithObjects: [NSNumber numberWithInt:trapSelected], nil]];
    NSString *resultTrapCountX = [self executeXMLRPCRequest:requestTrapCountX];
    [requestTrapCountX release];


    if (![resultHello isKindOfClass:[NSString class]]){
            alert = [[UIAlertView alloc] initWithTitle:@"Error: Invalid Server Address" message:@"Please Check Server Address and Try Again" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
            [alert show];
            [alert release];
    }
    else{
        helloResponse.text = resultHello;
        SumCountsResponse.text = resultSumCounts;
        pickerTrap.text = resultTrapCountX;

    }
    }
}


- (id)executeXMLRPCRequest:(XMLRPCRequest *)req {
    XMLRPCResponse *userInfoResponse = [XMLRPCConnection sendSynchronousXMLRPCRequest:req];
    if ([userInfoResponse isKindOfClass:[NSError class]]) {
        return alert;
    }
    else{
    return [userInfoResponse object];
    }
}

【问题讨论】:

  • 需要更多信息。怎么了?你期望发生什么?
  • 该按钮正在执行调用 XMLRPC 服务器的代码。我首先在 UITextBox 中输入一个 IP 地址,然后按 getResponse IBAction。我希望它首先退出键盘,然后调用 XMLRPC 服务器并显示数据。就像现在一样,首先调用服务器,然后数据通过,然后键盘退出。

标签: iphone ios xml-rpc


【解决方案1】:

代替

[self serverInputReturn:self];

试试

[self serverInputReturn:self.serverInput];

您需要传递 UITextField 而不是 UIViewController。

确保将 UITextField 的委托设置为 UIViewController

self.serverInput.delegate = self;

【讨论】:

  • 不,还是一样:按下 getResponse,调用服务器,获取信息,然后松开键盘...
  • 可以直接试试吗,[self.serverInput resignFirstResponder]?
  • 同时检查 serverInput 是否确实是 firstResponder,通过 serverInput.isFirstResponder
  • 添加了:'if(serverInput.isFirstResponder){ [self.serverInput resignFirstResponder];}' 但仍然做同样的事情......
  • 对不起。首先..请使用self.serverInput。不是服务器输入。其次,代码是否进入 if 语句?可以在调试模式下运行吗?
猜你喜欢
  • 2022-12-18
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
相关资源
最近更新 更多