创建免责声明屏幕,用户必须完全向下滚动

时间:2013-07-08 15:18:20

标签: ios uiviewcontroller

我需要创建一个带有长文本的discaimer屏幕(本地化为不同的语言)。

用户应向下滚动到文本的底部,然后看到“同意”按钮。

由于警报相当有限,我创建了一个UIViewController,并将ScrollView放入其中。

现在我把一个TextView放到这个Scrollview中 - 但问题是这个TextView本身不应该是可滚动的,但它应该具有它所拥有的完整文本所需的确切大小(当然每个语言和总是超过屏幕高度可以保持不滚动)然后在那个长TextView我需要定位UIButton。

TextView + Button都在ScrollView中。

由于UITextView具有不同的高度,具体取决于当前语言 - 如何正确设置此完整屏幕 - 理想情况下使用IB。或者如果不可能以编程方式进行?

还是有一种完全不同的简单方法吗?

3 个答案:

答案 0 :(得分:2)

将UILabel(行数设置为0)及其下方的按钮添加到滚动视图中。设置约束,以便按钮在标签底部具有垂直间距约束。为标签指定固定宽度约束和高度约束。将IBOutlet设置为高度约束,并使用从sizeWithFont获得的值调整代码中该约束的常量参数:constrainedToSize:lineBreakMode:。您还需要使用相同的值以及适合按钮所需的大小来调整滚动视图的contentSize。这将导致标签根据其包含的文本具有正确的高度,并且您的按钮将始终位于该标签下方的设定距离。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.label.text = @"dfkl;jfjdfkjf sdfl klf;jskdl;fja skfjdklfj skdlfjs dklfjsklfj sklfjskl;f jks;alfjsk;lfjs;klfj;kfjs;kljk;lfjskdfj;klf j;klf jkl;fj;klfj;klfj k;fs;klfjsk;lfj ;klfjk;alfjk;alfjk;lfjk;lfjlkf kl;ajf akl;sfj sk;fk;lfjsk;ldfjsk;lfjsk;lfjsklfjkl;s fjklsafj kslfjkl fjklasfjklajfklafjaksdlfj lsdkf jsklfskl;f skld fjlk;sfklsfj ksff;kjdsfj sfkl;fkl;fklklfjlk;";
    CGSize labelSize = [self.label.text sizeWithFont:[UIFont systemFontOfSize:17] constrainedToSize:CGSizeMake(280, CGFLOAT_MAX)]; // 280 is the width of the label set in IB
    self.heightCon.constant = labelSize.height;
    self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width, labelSize.height +120);

}

在此示例中,heightCon是IBO中对标签的高度约束的IBOutlet。我在viewDidLoad中执行了此操作,但无论您使用文本填充标签,都需要执行此操作。

答案 1 :(得分:1)

您不需要专用于它的整个视图控制器。 UIAlertView应该自动创建一个带有适当按钮的可滚动文本框!

以下简单的几行。不要忘记在头文件中设置UIAlertViewDelegate:

NSString *message = @"This is a test message.\n\nYou should avoid this and that\n\nThis goes to the next line.";
NSString *title = @"Disclaimer";

[[[UIAlertView alloc] initWithTitle:title message:message delegate:self    cancelButtonTitle:@"Yes" otherButtonTitles:@"No", nil] show];

答案 2 :(得分:0)

我是如何通过创建UITableViewController(称之为DisclaimerViewController)来解决这个问题的。第一行显示文本。第二行是接受单元格,第三行是拒绝单元格。

在新的UITableViewController中创建协议和委托。该协议应具有Accept和Deny的选择器。委托应该允许任何符合新协议的对象。

从Presenting ViewController中,显示新的DisclaimerViewController模式。确保将委托设置为self并实现协议。由于accept和deny单元格位于UITableView的底部,因此您知道用户滚动到底部。没有其他方法可以使用Accept和Deny单元格来点击它们。

这似乎是很多工作,而且确实如此。但是现在,如果还有其他地方我需要一个免责声明文本,我可以重复使用这段代码而无需更改代码。