UIViewController数据刷新

司马德水
2023-12-01

</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];
    };
 类似资料: