2010-01-23 5 views
0

델리게이트 프로토콜을 만들었지 만 헤더 파일에 프로토콜을 구현했지만 필요한 메서드가 실행되지 않는 문제가 있습니다. 자세한 설명은 다음과 같습니다.델리게이트 프로토콜 생성 및 사용 관련 문제

표시되는 내 ViewController (TimeLineViewController)의 인스턴스를 생성했습니다. 이 ViewController에는 TableViewCell의 한 인스턴스에서 개별 Cells/Rows를받는 UITableView가 포함되어 있습니다. 그래서 ViewController는 TableCellView의 인스턴스를 생성합니다. TableViewCell에는 웹 링크가 포함 된 UITextView가 포함되어 있습니다. 이제 사파리가 링크를 열지 않고 내 내장 브라우저를 열면 좋겠다. 불행히도 TableViewCell은 WebView로 새로운 ViewController를 열 수 없으므로 위임 프로토콜을 만들기로 결정했습니다.

모든 것은 다음과 같습니다

WebViewTableCellDelegate.h 다음 TableViewCell의하는 .m에서

id <WebViewTableCellDelegate> _delegate; 

: 나는 TableViewCell의 인스턴스 WebViewDelegate을 만든 다음

@protocol WebViewTableCellDelegate 
-(void)loadWeb; 
@end 

:

@interface UITextView (Override) 
    @end 

    @class WebView, WebFrame; 
    @protocol WebPolicyDecisionListener; 

    @implementation UITextView (Override) 

    - (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id <WebPolicyDecisionListener>)listener 
    { NSLog(@"request: %@", request); 
     [_delegate loadWeb]; 
    } 
    @end 
- (void)setDelegate:(id <WebViewTableCellDelegate>)delegate{ 
    _delegate = delegate;} 
,

그리고 내 TimeLineViewController에서 나는 <와 프로토콜>과 loadWeb-metode 구현 :

- (void)loadWeb{ 
    WebViewController *web = [[WebViewController alloc] initWithNibName:nil bundle:nil]; 
    web.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self presentModalViewController: web animated:YES]; 
    [web release]; 
} 

을 그리고 TableViewCell의 인스턴스가 TimelineViewController 생성됩니다 때

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *MyIdentifier = @"MyIdentifier"; 
    MyIdentifier = @"tableCell"; 
    TableViewCell *cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
    if(cell == nil) { 
     [[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:self options:nil]; 
     cell = tableCell;} 

    [cell setDelegate:self]; 
//… 
} 

는 그것은이다 처음으로 나는 자신의 대표 프로토콜을 만들었고 어쩌면 어리석은 실수가 있었을 것이다. 또한 Objective-C와 프로그래밍을 일반적으로 4 주만 학습합니다.

도움 주셔서 감사합니다.

편집 : 문제를 발견했다고 생각하지만 해결 방법을 모릅니다. 나는 [_delegate loadWeb]을 사용하려고합니다. UITextView의 하위 클래스에서 (웹 링크에 반응 할 수있는 유일한 방법이기 때문에) 하위 클래스는 [_delegate loadWeb];을 사용할 수 없습니다. 나는 다른 방법으로 이것을 시도했고 효과가 있었다.

id <WebViewTableCellDelegate> *_delegate; 

가 있어야한다 :

답변

0

첫 번째 문제이다

id <WebViewTableCellDelegate> _delegate; 

id 유형은 이미 인스턴스에 대한 포인터 참조입니다.

+0

오케이 - 그래도 작동하지 않습니다. – Flocked