2011-08-12 53 views
0

我有一个按钮“getResponse”,它在将IP地址放入UITextField中之后向服务器发出XMLRPC调用。像“getResponse”按钮一样,先让键盘退出,然后再将其键入服务器。在按钮按下后立即退出键盘

就像现在一样,如果键盘已经打开,它将调用服务器,如果找不到有效的服务器,则检索信息或错误,然后退出键盘。

我知道它可能很容易,但我不能为我的生活弄清楚。任何帮助将是伟大的,谢谢!

代码:

小时。

#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]; 
    } 
} 
+0

设置的UITextField的委托到的UIViewController需要更多的信息。发生什么事?你期望发生什么? – ColdLogic

+0

该按钮正在执行调用XMLRPC服务器的代码。我首先在UITextBox中放入一个IP地址,然后按下getResponse IBAction。我希望它首先辞去键盘,然后调用XMLRPC服务器并显示数据。就像现在这样,服务器首先被调用,然后数据通过,然后键盘退出。 – swbooking

回答

1

而不是

[self serverInputReturn:self]; 

尝试

[self serverInputReturn:self.serverInput]; 

你需要传递的UITextField不是UIViewController中。

确保您通过

self.serverInput.delegate = self; 
+0

不,仍然工作相同:按getResponse,调用服务器,获取信息,然后释放键盘... – swbooking

+0

你可以直接尝试,[self.serverInput resignFirstResponder]? – mbh

+0

另外检查serverInput是否确实是第一个响应者,通过serverInput.isFirstResponder – mbh

相关问题