</pre>思考:<p></p><p><span style="font-size:14px">正常情况下,UITableViewController可以刷新数据,采用<span class="s1">[</span><span class="s2">self</span><span class="s1">.</span><span class="s3">tableView</span><span class="s1"></span><span class="s4">reloadData</span><span class="s1">]; 但是假使原先的控制器并不是继承自UITableViewController怎么办呢?</span></span></p><p></p><p><span style="font-size:14px">实际开发中,遇到问题如下:</span></p><p><span style="font-size:14px">点击浮层上面的招商银行卡,需要将底层的借记卡尾号,图标,银行名称全部更换掉,浮层背后的页面是UIViewController。</span></p><p><span style="font-size:14px"></span></p><p><span style="font-size:14px">解决方法如下:</span></p><p><span style="font-size:14px">银行卡担保界面的创建是通过封装一个view创建的(UIView继承自UIScrollView),在创建的时候传不同的参数创建。</span></p><p><span style="font-size:14px"></span></p><pre name="code" class="objc">- (void)initializeViewswithparma:(NSString *)cardDesc andAvailableCardList:(TNHotelAvaliableCardList *)availableCardList
当点击交换按钮的时候,需要在封装的view里面先清除的原先的界面,再重新创建新的界面就可以。
- (void)refreshView
{
[self.scrollView removeFromSuperview];
}
//点击浮层上面的常用卡 更换不同的界面。
- (void)refreshViewController:(TNHotelAvaliableCardList *)cardlist
{
[self.creditInfoView refreshView];
self.validInfo = nil;
self.bankNumber = nil;
self.cardNumber = nil;
self.availableCardList = cardlist;
[self initializeViewswithparma:self.availableCardList.cardTypeDesc andAvailableCardList:self.availableCardList];
}
中间是采用block进行传模型的,方法如下:
采用block进行传递,
在浮层页面点击交换按钮的时候,用一个block记录下点击事件,并且将浮层页面的模型传给银行卡担保界面。
@property (nonatomic, copy) void(^hotelCardTypeDesc)(TNHotelAvaliableCardList *availist);
点击的浮层cell的时候,保存好模型。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
self.selectIndex = indexPath.row;
if ([self.changeWays[indexPath.row] isKindOfClass:[TNHotelAvaliableCardList class]]) {
TNHotelAvaliableCardList *cardList = self.changeWays[indexPath.row];
[self dimissSelfWithAnimattion:0.0f];
if (self.hotelCardTypeDesc) {
self.hotelCardTypeDesc(cardList);
}
} else
{
TNHotelGuaranteeWay *way = self.changeWays[self.selectIndex];
[self goToPay:way.type];
}
}
在银行卡担保界面:
//block用于回调之前的参数
controller.hotelCardTypeDesc = ^(TNHotelAvaliableCardList *par1)
{
[self refreshViewController:par1];
};