我有一个UITableViewController,我在需要时实际调用我的superview。当我点击表格视图时,我希望将信息放在UITextField中。现在我可以让它从superview中正确记录,但文本永远不会放在正确的字段中。
来自UITablViewController
:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
NSLog(@"Index %i Touched:",indexPath.row);
self.MainView = [[TwitterViewController alloc] init];
self.MainView.view = super.view;
selectedFriend = [(Tweet*)[friends objectAtIndex:indexPath.row]followingScreenName];
self.MainView.selectedFriendForTweet = self.selectedFriend;
[self.MainView setSelectedFriendInBody:self.selectedFriend
into:self.MainView.TweetBody
with:self];
//NSLog(@"selected name on tblview = %@",selectedFriend);
self.MainView.TweetBody.text = self.selectedFriend;
}
如你所见,当用户点击tblview时调用我的方法
[self.MainView setSelectedFriendInBody:self.selectedFriend 成:self.MainView.TweetBody 用:自];
这是方法:现在这个日志工作,信息是正确的,但不会进入textview!
-(void)setSelectedFriendInBody:(NSString*)aString into:(UITextView*)atextView with:(id)sender
{
aString = friendsTbl.selectedFriend;
friendsTbl.selectedFriend = self.selectedFriendForTweet;
atextView = self.TweetBody;
[self.TweetBody setText:selectedFriendForTweet];
NSLog(@"superviews name = %@", selectedFriendForTweet);
[selectedFriendForTweet retain];
}
任何帮助将不胜感激!谢谢
答案 0 :(得分:1)
你在代码中做了一些奇怪的事情。举个例子:您的方法setSelectedFriendInBody:into:
获取了两个您未在实现中使用的参数。更糟糕的是:你正在为那些绝对没有效果的参数分配一些值。必须有错......
您的代码是这样的:
a=2; b=3; c=10; d=20;
=> f(x,y)=c+d => f(a,b)=30
迫使superview
是一个特殊的观点是一个坏主意(关于可重用性)。正确的方法是使用delegate-pattern。只需定义一个应包含方法setSelectedFriendInBody:into:
的协议,并在MainView中实现该协议。 TablView只获取并调用委托(实现协议的id)。
@protocol MyTablViewDelegate
-(void)setSelectedFriendInBody:(NSString*)aString;
@end
@interface MyTablView : UITableView<UITableViewDelegate>
{
id<MyTablViewDelegate> myDelegate;
}
@property (assign) id<MyTablViewDelegate> myDelegate; //I use assign here for avoiding mem-leaks due to circular retain-chains
@end
@implementation MyTablView
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
....
NSString *someString = [(Tweet*)[friends objectAtIndex:indexPath.row]followingScreenName];
NSLog(@"someString: %@", someString); // maybe there is an error in getting that object from array or in followingScreenName
[self.myDelegate setSelectedFriendInBody: someString];
}
@end
@interface MainView : UIView<MyTablViewDelegate>
...
@end
@implementation MainView
...
-(void) sthAtLoadTime
{
MyTablView *mySubView = [[MyTablView alloc] init...];
mySubView.myDelegate = self;
}
-(void)setSelectedFriendInBody:(NSString*)aString
{
if(!self.TweetBody)
NSLog(@"ERR: TweetBody not set");
self.TeetBody.text = aString;
}
@end
注意另一件事:我假设你的myTablView也实现了UITableViewDelegate
which is also not the best way to do
这应该做的工作。