从ViewController里面调用MainViewController的方法didselectrowatindexpath Objective c

时间:2017-01-17 05:36:05

标签: ios objective-c iphone uitableview uiviewcontroller

`

"BeneficieryListViewController.h"
    @protocol BeneficieryListViewControllerDelegate <NSObject>
    -(void)shiftTabLocation:(CGFloat)tabValue;
    @end

    @interface BeneficieriesListViewController : UIViewController
    @property (weak, nonatomic) id<BeneficieryListViewControllerDelegate> myDelegate;
    @end

"BeneficieryListViewController.m"
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if(self.myDelegate && [self.myDelegate respondsToSelector:@selector(shiftTabLocation:)])
        {
            [self.myDelegate shiftTabLocation:2.0];
        }
  }
"MainViewController.m"      
    -(void)shiftTabLocation:(CGFloat)tabValue
    {
        BeneficieriesListViewController *bvc = [[BeneficieriesListViewController alloc] init];
        bvc.myDelegate = self;

        [self selectTabAtIndex:tabValue didSwipe:YES];
    }

`我必须创建水平可滚动的UIViewControllers包含4个选项卡,并且在每个选项卡的选择上应该显示不同的UIView。为此,我使用库并创建了一个UIViewController作为该库的子类&#34; ViewPagerController&#34;。并且,我创建了一个NSMutableArray,其中包含4个UIViewControllers,我在选项卡的每个选项上作为UIView传递。

一个UIViewController有UITableView,我现在要做的是 - 在选择UITableViewCell(在第一个UIViewController内)时,标签栏应该改变它的位置并转移到符合条件的另一个标签。

我已经尝试使用委托调用主视图控制器的方法,但它不起作用,我也尝试直接指定主视图控制器的对象并调用它的方法,但它不起作用。

请帮助我解决这个问题,我很多天都陷入困境。 提前感谢您查看问题。

2 个答案:

答案 0 :(得分:0)

您正在功能BeneficieriesListViewController中设置BeneficieriesListViewController的委托,该委托由委托调用。因此它不起作用。将MainViewController中的以下代码移动到viewDidLoad或viewDidAppear方法

MainViewController.m

-(void)viewDidLoad
{

BeneficieriesListViewController *bvc = [[BeneficieriesListViewController alloc] init];
    bvc.myDelegate = self;
}

它会起作用。现在shiftTabLocation函数将是这样的

-(void)shiftTabLocation:(CGFloat)tabValue
{
    [self selectTabAtIndex:tabValue didSwipe:YES];
}

答案 1 :(得分:0)

我无法了解shiftTabLocation方法中发生的情况。为什么你在这里创建未使用的BeneficieriesListViewController对象?

您调用BeneficieryListViewControllerDelegate方法时是否存在委托对象?

如果是这样,你将面临两种情况之一:

  1. 按照预期调用的方法
  2. app崩溃,因为委托对象类没有实现此委托方法
  3. 如果在调用它时委托属性为nil,请尝试查找创建BeneficieriesListViewController对象及其委托属性的位置。不要忘记你的委托属性很弱,它在失去最后一个强链接的那一刻就会解除分配。