2012-10-19 1 views
2

위임 자습서를 광범위하게 검색했지만 제대로 작동하지 않았습니다. 여기 이야기와 코드가 있습니다. DetailViewController에는 UITextField 및 UIButton이 있습니다. 당신이 버튼을 누르면 간단한 PricelistViewController 테이블로 연결됩니다. 해당 테이블의 행을 누르면 행의 제목에서 첫 번째보기까지의 텍스트가 반환되어 텍스트 필드에 삽입됩니다. 그러나 그렇지 않습니다.iOS 위임이 작동하지 않습니다. (코드 내부) : 다른보기에서 UITableView에서 UITextField로 데이터를 전송할 수 없습니다.

PricelistViewController.h (제 뷰) :

@class PricelistViewController; 

@protocol PricelistViewControllerDelegate <NSObject> 
@required 
//- (void)theSaveButtonOnThePriceListWasTapped:(PricelistViewController *)controller didUpdateValue:(NSString *)value; 
- (void)theSaveButtonOnThePriceListWasTapped:(NSString *)value; 
@end 



@interface PricelistViewController : UITableViewController 

@property (nonatomic, weak) id <PricelistViewControllerDelegate> delegate; 

@property (retain, nonatomic) NSMutableArray * listOfSections; 

@end 

PricelistViewController.m이있는 코드 DetailViewController.h (이다

@synthesize delegate; 


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    NSDictionary *dictionary = [listOfSections objectAtIndex:indexPath.section]; 
    NSArray *array = [dictionary objectForKey:@"ProductSections"]; 
    NSString *selectedProduct = [array objectAtIndex:indexPath.row]; 

    [self.delegate theSaveButtonOnThePriceListWasTapped:[NSString stringWithFormat:@"%@", selectedProduct]]; 

    [self.navigationController popViewControllerAnimated:YES]; 

} 

여기서 코드는 텍스트 필드와 버튼이있는 첫 번째보기) :

DetailViewController.m
#import "PricelistViewController.h" 

@interface DetailViewController : UIViewController <UITextFieldDelegate, PricelistViewControllerDelegate> 

(I 필드에 텍스트를 변경하려고 어떻게 I) :

- (void)theSaveButtonOnThePriceListWasTapped:(NSString *)value 
{ 
    NSLog(@"Text, sent here: %@", value); 
    NSLog(@"Text was sent here."); 
    self.detailDescriptionLabel.text = value; 

} 

detailDescriptionLabel는 텍스트를 표시 할 용의 UITextField입니다.

누군가 코드를 확인하고 도움을 줄 수 있습니까? 나는이 문제에 대해 이틀 동안 운이 없다!

답변

0

먼저 왜 PriceListViewController의 헤더 파일에서 클래스를 참조하는 (@class) 클래스를 사용하고 있습니까? 이것은 필요하지 않습니다.

배열 속성이 비 원자형이어야하며 강해야합니다. 둘째로 ARC를 사용하고 있습니까? 대리인 속성이 비 구조적이어야한다면 할당하십시오. 당신은 용어를 혼합하는 것 같습니다

배열을 초기화하는 방법은 무엇입니까?

+0

안녕하세요 Matt, 의견에 감사드립니다. 클래스 선언이 없으면 컴파일러에서 'Expected a type' 오류를 반환하고 예, ARC를 사용하고 있습니다. 배열의 속성을 강하게 변경했습니다. 행운은 없습니다. PriceListViewController의 ViewDidLoad에서 배열을 초기화합니다. 'listOfSections = [[NSMutableArray alloc] init]; ' – kovallux

+0

'NSDictionary * dictionary = [listOfSections objectAtIndex : indexPath.section]; NSArray * array = [사전 objectForKey : @ "ProductSections"]; NSString * selectedProduct = [배열 objectAtIndex : indexPath.row];' – kovallux

0

나는 그것을 알아 냈다.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSDictionary *dictionary = [listOfSections objectAtIndex:indexPath.section]; 
    NSArray *array = [dictionary objectForKey:@"ProductSections"]; 
    NSString *selectedProduct = [array objectAtIndex:indexPath.row]; 

    if (delegatePrice && [delegatePrice respondsToSelector:@selector(theSaveButtonOnThePriceListWasTapped:didUpdateValue:)]) 
    { 
     [delegatePrice theSaveButtonOnThePriceListWasTapped:self didUpdateValue:selectedProduct]; 
    } 

가장 중요한 : 나는 스토리 보드를 사용하는 것을 거부하고 대신 내 PricelistViewController에 대한 좋은 오래된 .xib 파일을 만든 내가 메소드를 호출하는 방식을 변경 한 PricelistViewController.m에서 은 (문 경우 추가) 보기와 그것은 바로 일했다!