`
"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内)时,标签栏应该改变它的位置并转移到符合条件的另一个标签。
我已经尝试使用委托调用主视图控制器的方法,但它不起作用,我也尝试直接指定主视图控制器的对象并调用它的方法,但它不起作用。
请帮助我解决这个问题,我很多天都陷入困境。 提前感谢您查看问题。
答案 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方法时是否存在委托对象?
如果是这样,你将面临两种情况之一:
如果在调用它时委托属性为nil,请尝试查找创建BeneficieriesListViewController对象及其委托属性的位置。不要忘记你的委托属性很弱,它在失去最后一个强链接的那一刻就会解除分配。