Iphone 将信息从UITableView发送到SuperView
我有一个UITableViewController,在需要时我可以实际调用它进入superview。当我点击表格视图时,我希望信息被放置在UITextField中。现在我可以让它从superview中正确地记录,但是文本永远不会放在正确的字段中 来自Iphone 将信息从UITableView发送到SuperView,iphone,uitableview,uitextview,superview,Iphone,Uitableview,Uitextview,Superview,我有一个UITableViewController,在需要时我可以实际调用它进入superview。当我点击表格视图时,我希望信息被放置在UITextField中。现在我可以让它从superview中正确地记录,但是文本永远不会放在正确的字段中 来自UITableViewController: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath { NSLog
UITableViewController
:
- (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.main查看设置Selected Friends正文:self.Selected Friend
进入:self.MainView.TweetBody
与:自我]
这里是这个方法:现在这个日志工作,信息是正确的,但只是不会进入文本视图
-(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];
}
任何帮助都将不胜感激!谢谢您在代码中做了一些奇怪的事情。举个例子:您的方法
setSelectedFriendInBody:into:
获取两个在实现中未使用的参数。更糟糕的是:您正在将一些值赋给该参数,这显然没有任何效果。一定有什么不对劲。。。
你的代码是这样做的:a=2;b=3;c=10;d=20代码>
=>f(x,y)=c+d=>f(a,b)=30
而且(在可重用性方面)强迫superview
是一个特殊视图是一个坏主意。正确的方法是使用。只需定义一个协议,该协议应包含您的方法setSelectedFriendInBody:into:
,并在主视图中实现该协议。TablView仅获取和调用委托(实现协议的id)
@协议MyTablViewDelegate
-(无效)设置选定的FriendinBody:(NSString*)aString;
@结束
@接口MyTableView:UITableView
{
id myDelegate;
}
@属性(分配)id myDelegate//我在这里使用assign是为了避免由于环形锁紧链而导致mem泄漏
@结束
@实现MyTableView
-(void)tableView:(UITableView*)tableView未选择RowatineXpath:(NSIndexPath*)indexPath
{
....
NSString*someString=[(Tweet*)[friends objectAtIndex:indexath.row]following ScreenName];
NSLog(@“someString:%@”,someString);//从数组或以下屏幕名中获取该对象时可能出错
[self.myDelegate setSelectedFriendInBody:someString];
}
@结束
@接口主视图:UIView
...
@结束
@实现主视图
...
-(void)sthAtLoadTime
{
MyTableView*mySubView=[[MyTableView alloc]init…];
mySubView.myDelegate=self;
}
-(无效)设置选定的FriendinBody:(NSString*)aString
{
如果(!self.TweetBody)
NSLog(@“错误:未设置TweetBody”);
self.TeetBody.text=aString;
}
@结束
注意另一件事:我假设MyTableView也实现了UITableViewDelegate
这就可以了。谢谢您的回复!我正在尝试这一点,它不是通过代表发送信息。只要委托能够使用主视图中的void语句,一切都可以正常工作,但在选择tableview时,它永远不会被调用。这就是2011-09-24 19:02:05.278 ThemeCacher[11717:607]someString:关于管理2011-09-24 19:02:06.396 ThemeCacher[11717:607]索引10被触动的原因:2011-09-24 19:02:06.398 ThemeCacher[11717:607]someString:最初的2011-09-24 19:02:07.866 ThemeCacher[11717:607]索引12被触动的原因:您是否已将代理设置为执行?我指的是行mySubView.myDelegate=self代码>那么这个代码段被调用了吗?您确定没有激发委托方法吗?请用更多的NSLog或断点来测试。是的,只需用断点和日志进行双重检查。在需要调用实际的委托方法之前,一切似乎都正常!NSLog(@“错误:未设置TweetBody”);永远不会发生!我将日志和断点放在那里,但从未调用它?我在[self.delegate setSelectedFriendInBody:selectedFriend]上得到一个断点;但不在superview void delegate methodok中,然后检查是否确实设置了委托。在didSelectRowAtIndexPath:
:if(!self.myDelegate)NSLog(@“Delegate not set!!”);否则如果(![self.myDelegate respondsToSelector:@selector(setSelectedFriendInBody:)])NSLog(@“该代理未实现协议”)代码>问题是这个概念运行良好。如果它不起作用,那么其他地方就有问题了。这记录了代理未设置,因此我将继续了解为什么感谢您的所有帮助!
@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