Отправка информации из UITableView в SuperView - PullRequest
0 голосов
/ 25 сентября 2011

У меня есть 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 в: self.MainView.TweetBody с: 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 Ответ

1 голос
/ 25 сентября 2011

вы делаете странные вещи в своем коде. Просто пример: ваш метод 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 , что также не самый лучший способ сделать

это должно сделать работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...