Отправка информации из UITableView в SuperView
У меня есть UITableViewController, который я при необходимости прагматично вызываю в своем суперпредставлении. Когда я нажимаю на табличное представление, я хочу, чтобы информация была помещена в UITextField. теперь я могу заставить его правильно регистрироваться в суперпредставлении, но текст никогда не помещается в правильное поле.
Исходя из 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 into: self.MainView.TweetBody with: self];
Вот этот метод: теперь этот журнал работает, и информация верна, но просто не войдет в текстовое представление!
-(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];
}
Любая помощь будет принята с благодарностью! Спасибо
1 ответ
Вы делаете странные вещи в своем коде. Просто пример: ваш метод setSelectedFriendInBody:into:
получает два параметра, которые вы не используете в своей реализации. Еще хуже: вы присваиваете некоторые значения этим параметрам, что определенно не влияет. Должно быть что-то не так... ваш код выглядит так: a=2; b=3; c=10; d=20;
=> f(x,y)=c+d => f(a,b)=30
И это плохая идея (в отношении повторного использования), чтобы заставить superview
это особый вид. Правильный способ сделать это - использовать шаблон делегата. просто определите протокол, который должен содержать ваш метод setSelectedFriendInBody:into:
и реализовать этот протокол в вашем MainView. TablView только получает и вызывает делегат (идентификатор, который реализует протокол).
@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
что тоже не самый лучший способ сделать
это должно сделать работу.