Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将信息从UITableView发送到SuperView_Iphone_Uitableview_Uitextview_Superview - Fatal编程技术网

Iphone 将信息从UITableView发送到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,在需要时我可以实际调用它进入superview。当我点击表格视图时,我希望信息被放置在UITextField中。现在我可以让它从superview中正确地记录,但是文本永远不会放在正确的字段中

来自
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