델리게이트 프로토콜을 만들었지 만 헤더 파일에 프로토콜을 구현했지만 필요한 메서드가 실행되지 않는 문제가 있습니다. 자세한 설명은 다음과 같습니다.델리게이트 프로토콜 생성 및 사용 관련 문제
표시되는 내 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;
가 있어야한다 :
오케이 - 그래도 작동하지 않습니다. – Flocked