2011-08-12 2 views
0

UITextField에서 IP 주소를 입력 한 후 서버에 XMLRPC 호출을하는 "getResponse"단추가 있습니다. "getResponse"버튼과 같은 ID를 사용하면 먼저 키보드를 누른 후 서버에 전화를 건 경우 키보드를 종료합니다.단추 누르기 직후 키보드 닫기

키보드가 켜져 있으면 서버를 호출하고 유효한 서버를 찾지 못하면 정보 또는 오류를 검색 한 다음 키보드를 종료합니다.

나는 그것의 아마 아마 쉬운 것을 알고있다. 그러나 나는 그것을 이해할 수 없다. 어떤 도움이라도 좋을 것입니다, 고마워요!

코드 :

시간.

#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 

m.

#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

를 통해 UIViewController에로의 UITextField의 대리자를 설정되어 있는지 확인합니다. 무슨 일 이니? 너는 무엇을 기대하고 있니? – ColdLogic

+0

버튼이 XMLRPC 서버를 호출하는 코드를 실행 중입니다. 먼저 UITextBox에 IP 주소를 입력 한 다음 getResponse IBAction을 누릅니다. 나는 먼저 키보드를 사임하고, 그 다음에 XMLRPC 서버를 호출하고 데이터를 보여주고 싶습니다. 지금은 서버가 먼저 호출 된 다음 데이터가 전달 된 다음 키보드가 사임합니다. – swbooking

답변

1

대신

[self serverInputReturn:self]; 

의 당신은의 UITextField하지 UIViewController에 전달해야

[self serverInputReturn:self.serverInput]; 

보십시오.

하면 더 많은 정보를 필요

self.serverInput.delegate = self; 
+0

아니요, 여전히 동일하게 작동합니다 : getResponse를 눌러 서버를 호출하고 정보를 얻은 다음 키보드를 놓습니다 ... – swbooking

+0

[self.serverInput resignFirstResponder]를 직접 시도해볼 수 있습니까? – mbh

+0

또한 serverInput.isFirstResponder – mbh

관련 문제