Skip to content
This repository
Browse code

Added a AKOMultiColumnTextViewDataSource protocol, which makes it eas…

…y to add views in the columns of the text; thanks to Christian Menschel from tapwork.de for the contribution!
  • Loading branch information...
commit 9378ecd99f5bb09cf5dab5b7775022ddbd2c4f65 1 parent 6f1160f
authored July 07, 2011
4  Classes/Controllers/PageController.h
@@ -7,11 +7,13 @@
7 7
 //
8 8
 
9 9
 #import <UIKit/UIKit.h>
  10
+#import "AKOMultiColumnTextViewDataSource.h"
  11
+
10 12
 
11 13
 @class AKOMultiPageTextView;
12 14
 @class AKOCustomFontLabel;
13 15
 
14  
-@interface PageController : UIViewController 
  16
+@interface PageController : UIViewController  <AKOMultiColumnTextViewDataSource>
15 17
 {
16 18
 @private
17 19
     AKOMultiPageTextView *_multiPageView;
21  Classes/Controllers/PageController.m
@@ -47,15 +47,30 @@ - (void)viewDidLoad
47 47
     
48 48
 
49 49
     self.fontSize = 24.0;
  50
+    
  51
+    self.multiPageView.dataSource = self;
  52
+     self.multiPageView.columnInset = CGPointMake(50, 30);
50 53
     self.multiPageView.text = [NSString stringFromFileNamed:@"lorem_ipsum.txt"];
51 54
     self.multiPageView.font = [UIFont fontWithName:@"Georgia" size:self.fontSize];
52  
-    self.multiPageView.columnCount = UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? 3 : 4;
  55
+    self.multiPageView.columnCount = UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? 2 : 3;
53 56
 
54 57
     UIPinchGestureRecognizer *pinchRecognizer = [[[UIPinchGestureRecognizer alloc] initWithTarget:self 
55 58
                                                                                            action:@selector(changeTextSize:)] autorelease];
56 59
     [self.multiPageView addGestureRecognizer:pinchRecognizer];
57 60
 }
58 61
 
  62
+- (UIView*)akoMultiColumnTextView:(AKOMultiColumnTextView*)textView viewForColumn:(NSInteger)column onPage:(NSInteger)page
  63
+{
  64
+    if (page == 0 && column == 1)
  65
+    {
  66
+        UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 200)] autorelease];
  67
+        view.backgroundColor = [UIColor redColor];
  68
+        return view;
  69
+    }
  70
+        
  71
+    return nil;
  72
+}
  73
+
59 74
 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
60 75
 {
61 76
     return YES;
@@ -71,11 +86,11 @@ - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interf
71 86
 {
72 87
     if (UIInterfaceOrientationIsPortrait(interfaceOrientation))
73 88
     {
74  
-        self.multiPageView.columnCount = 3;
  89
+        self.multiPageView.columnCount = 2;
75 90
     }
76 91
     else
77 92
     {
78  
-        self.multiPageView.columnCount = 4;
  93
+        self.multiPageView.columnCount = 3;
79 94
     }
80 95
     [self.multiPageView setNeedsDisplay];
81 96
     [self.label setNeedsDisplay];
20  Classes/Helpers/AKOMultiColumnTextViewDataSource.h
... ...
@@ -0,0 +1,20 @@
  1
+//
  2
+//  AKOMultiColumnTextViewDataSource.h
  3
+//  CoreTextWrapper
  4
+//
  5
+//  Created by Christian Menschel on 12.05.11.
  6
+//  Copyright 2011 akosma software. All rights reserved.
  7
+//
  8
+
  9
+#import <Foundation/Foundation.h>
  10
+
  11
+@class AKOMultiColumnTextView;
  12
+
  13
+@protocol AKOMultiColumnTextViewDataSource <NSObject>
  14
+
  15
+@optional
  16
+
  17
+- (UIView*)akoMultiColumnTextView:(AKOMultiColumnTextView*)textView viewForColumn:(NSInteger)column onPage:(NSInteger)page;
  18
+
  19
+
  20
+@end
24  Classes/Views/AKOMultiColumnTextView.h
@@ -8,6 +8,7 @@
8 8
 
9 9
 #import <UIKit/UIKit.h>
10 10
 #import <CoreText/CoreText.h>
  11
+#import "AKOMultiColumnTextViewDataSource.h"
11 12
 
12 13
 @interface AKOMultiColumnTextView : UIView 
13 14
 {
@@ -22,6 +23,17 @@
22 23
     CFIndex _startIndex;
23 24
     CFIndex _finalIndex;
24 25
     BOOL _moreTextAvailable;
  26
+    
  27
+    CTLineBreakMode             _lineBreakMode;
  28
+    CTTextAlignment             _textAlignment;
  29
+    CGFloat                     _firstLineHeadIndent;
  30
+    CGFloat                     _spacing;
  31
+    CGFloat                     _topSpacing;
  32
+    CGFloat                     _lineSpacing;
  33
+    CGPoint                     _columnInset;
  34
+    
  35
+    NSInteger _page;
  36
+    id <AKOMultiColumnTextViewDataSource> _dataSource;
25 37
 }
26 38
 
27 39
 @property (nonatomic) NSInteger columnCount;
@@ -32,4 +44,16 @@
32 44
 @property (nonatomic, readonly) CFIndex finalIndex;
33 45
 @property (nonatomic, readonly) BOOL moreTextAvailable;
34 46
 
  47
+@property (nonatomic, assign) CTLineBreakMode   lineBreakMode;
  48
+@property (nonatomic, assign) CTTextAlignment   textAlignment;
  49
+@property (nonatomic, assign) CGFloat           firstLineHeadIndent;
  50
+@property (nonatomic, assign) CGFloat           spacing;
  51
+@property (nonatomic, assign) CGFloat           topSpacing;
  52
+@property (nonatomic, assign) CGFloat           lineSpacing;
  53
+@property (nonatomic, assign) CGPoint           columnInset;
  54
+
  55
+@property (nonatomic, assign)     id <AKOMultiColumnTextViewDataSource> dataSource;
  56
+
35 57
 @end
  58
+
  59
+
136  Classes/Views/AKOMultiColumnTextView.m
... ...
@@ -1,4 +1,4 @@
1  
-//
  1
+
2 2
 //  AKOMultiColumnTextView.m
3 3
 //  CoreTextWrapper
4 4
 //
@@ -17,7 +17,7 @@ - (void)updateAttributedString;
17 17
 - (void)updateFrames;
18 18
 - (void)setup;
19 19
 - (void)createColumns;
20  
-
  20
+- (void)setPage:(NSInteger)page;
21 21
 @end
22 22
 
23 23
 
@@ -32,6 +32,16 @@ @implementation AKOMultiColumnTextView
32 32
 @synthesize moreTextAvailable = _moreTextAvailable;
33 33
 @synthesize attributedString = _attributedString;
34 34
 
  35
+@synthesize lineBreakMode = _lineBreakMode;
  36
+@synthesize textAlignment = _textAlignment;
  37
+@synthesize firstLineHeadIndent = _firstLineHeadIndent;
  38
+@synthesize spacing = _spacing;
  39
+@synthesize topSpacing = _topSpacing;
  40
+@synthesize lineSpacing = _lineSpacing;
  41
+@synthesize columnInset = _columnInset;
  42
+
  43
+@synthesize dataSource = _dataSource;
  44
+
35 45
 #pragma mark -
36 46
 #pragma mark Init and dealloc
37 47
 
@@ -47,11 +57,20 @@ - (void)setup
47 57
     _moreTextAvailable = NO;
48 58
     _columnPaths = NULL;
49 59
     _frames = NULL;
  60
+    
  61
+    
  62
+    _lineBreakMode = kCTLineBreakByWordWrapping;
  63
+    _textAlignment = kCTLeftTextAlignment;
  64
+    _firstLineHeadIndent = 0.0;
  65
+    _spacing = 5.0;
  66
+    _topSpacing = 3.0;
  67
+    _lineSpacing = 1.0;
  68
+    _columnInset = CGPointMake(10.0, 10.0);
50 69
 }
51 70
 
52 71
 - (id)initWithFrame:(CGRect)frame 
53 72
 {
54  
-    if (self = [super initWithFrame:frame])
  73
+    if ((self = [super initWithFrame:frame]))
55 74
     {
56 75
         [self setup];
57 76
     }
@@ -60,7 +79,7 @@ - (id)initWithFrame:(CGRect)frame
60 79
 
61 80
 - (id)initWithCoder:(NSCoder *)aDecoder
62 81
 {
63  
-    if (self = [super initWithCoder:aDecoder])
  82
+    if ((self = [super initWithCoder:aDecoder]))
64 83
     {
65 84
         [self setup];
66 85
     }
@@ -79,6 +98,7 @@ - (void)dealloc
79 98
         CFRelease(_frames);
80 99
     }
81 100
     
  101
+    self.dataSource = nil;
82 102
     self.attributedString = nil;
83 103
 
84 104
     [_text release];
@@ -127,6 +147,19 @@ - (NSString *)text
127 147
     return _text;
128 148
 }
129 149
 
  150
+- (void)setDataSource:(id<AKOMultiColumnTextViewDataSource>)dataSource
  151
+{
  152
+    if (![_dataSource isEqual:dataSource])
  153
+    {
  154
+        _dataSource = dataSource;
  155
+         if (dataSource != nil)
  156
+         {
  157
+             [self updateFrames];
  158
+             [self setNeedsDisplay];
  159
+         }
  160
+    }
  161
+}
  162
+
130 163
 - (void)setText:(NSString *)newText
131 164
 {
132 165
     if (![_text isEqualToString:newText])
@@ -155,6 +188,8 @@ - (void)setColumnCount:(NSInteger)newColumnCount
155 188
     }
156 189
 }
157 190
 
  191
+
  192
+
158 193
 #pragma mark -
159 194
 #pragma mark Drawing methods
160 195
 
@@ -183,6 +218,7 @@ - (void)drawRect:(CGRect)rect
183 218
 
184 219
 - (void)createColumns
185 220
 {
  221
+    
186 222
     int column;
187 223
     CGRect* columnRects = (CGRect*)calloc(_columnCount, sizeof(*columnRects));
188 224
     
@@ -203,7 +239,7 @@ - (void)createColumns
203 239
     // Inset all columns by a few pixels of margin.
204 240
     for (column = 0; column < _columnCount; column++) 
205 241
     {
206  
-        columnRects[column] = CGRectInset(columnRects[column], 10.0, 10.0);
  242
+        columnRects[column] = CGRectInset(columnRects[column], _columnInset.x, _columnInset.y);
207 243
     }
208 244
     
209 245
     // Create an array of layout paths, one for each column.
@@ -215,11 +251,75 @@ - (void)createColumns
215 251
     for (column = 0; column < _columnCount; column++) 
216 252
     {
217 253
         CGMutablePathRef path = CGPathCreateMutable();
218  
-        CGPathAddRect(path, NULL, columnRects[column]);
  254
+        
  255
+       
  256
+        // ask the delegate here
  257
+        UIView *columnView = nil;
  258
+        if ([self.dataSource respondsToSelector:@selector(akoMultiColumnTextView:viewForColumn:onPage:)])
  259
+        {
  260
+            columnView = [self.dataSource akoMultiColumnTextView:self viewForColumn:column onPage:_page];
  261
+        }
  262
+        if (columnView != nil)
  263
+        {
  264
+            CGRect columnRect = columnRects[column];
  265
+            CGRect rectFromView = columnView.frame;
  266
+            CGFloat cutLine = 0;
  267
+            CGFloat drawYOffset = 0;
  268
+            BOOL drawAbove = YES;
  269
+            
  270
+            
  271
+            if (rectFromView.origin.y < 0)
  272
+            {
  273
+                cutLine = rectFromView.origin.y+rectFromView.size.height + _columnInset.y;
  274
+            }
  275
+            else if (rectFromView.origin.y+rectFromView.size.height >= columnRect.size.height)
  276
+            {
  277
+                cutLine = columnRect.size.height-(columnRect.size.height - rectFromView.origin.y) - _columnInset.y;  
  278
+                drawAbove = NO;
  279
+                drawYOffset = columnRect.size.height-cutLine + _columnInset.y; 
  280
+            }
  281
+            else
  282
+            {
  283
+                cutLine = rectFromView.size.height+_columnInset.y;  
  284
+            }
  285
+
  286
+            CGRect rectToDraw1;
  287
+            CGRect rectToDraw2;
  288
+            CGRectDivide(columnRect, 
  289
+                         &rectToDraw1,
  290
+                         &rectToDraw2, 
  291
+                         cutLine, 
  292
+                         CGRectMinYEdge);
  293
+            
  294
+            
  295
+            
  296
+            CGRect drawRect = rectToDraw1;
  297
+            if (drawAbove == YES)
  298
+            {
  299
+                drawRect = rectToDraw2;
  300
+            }
  301
+            
  302
+            CGPathAddRect(path, NULL, CGRectMake(drawRect.origin.x,drawYOffset +_columnInset.y, drawRect.size.width, drawRect.size.height-_columnInset.y));
  303
+            
  304
+            // Not add the desired view on the column
  305
+            columnView.frame = CGRectMake(drawRect.origin.x,
  306
+                                          columnView.frame.origin.y + _columnInset.y,
  307
+                                          columnView.frame.size.width,
  308
+                                          columnView.frame.size.height);
  309
+            
  310
+            [self addSubview:columnView];
  311
+        }
  312
+        else
  313
+        {
  314
+            CGPathAddRect(path, NULL, columnRects[column]);
  315
+        }
  316
+        
219 317
         CFArrayInsertValueAtIndex(_columnPaths, column, path);
220 318
         CFRelease(path);
221 319
     }
222 320
     free(columnRects);
  321
+    
  322
+
223 323
 }
224 324
 
225 325
 - (void)updateAttributedString
@@ -245,21 +345,16 @@ - (void)updateAttributedString
245 345
                                           range:range];
246 346
         }
247 347
         
  348
+        
248 349
         CFIndex theNumberOfSettings = 6;
249  
-        CTLineBreakMode lineBreakMode = kCTLineBreakByWordWrapping;
250  
-        CTTextAlignment textAlignment = kCTLeftTextAlignment;
251  
-        CGFloat indent = 10.0;
252  
-        CGFloat spacing = 15.0;
253  
-        CGFloat topSpacing = 5.0;
254  
-        CGFloat lineSpacing = 1.0;
255 350
         CTParagraphStyleSetting theSettings[6] =
256 351
         {
257  
-            { kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), &textAlignment },
258  
-            { kCTParagraphStyleSpecifierLineBreakMode, sizeof(CTLineBreakMode), &lineBreakMode },
259  
-            { kCTParagraphStyleSpecifierFirstLineHeadIndent, sizeof(CGFloat), &indent },
260  
-            { kCTParagraphStyleSpecifierParagraphSpacing, sizeof(CGFloat), &spacing },
261  
-            { kCTParagraphStyleSpecifierParagraphSpacingBefore, sizeof(CGFloat), &topSpacing },
262  
-            { kCTParagraphStyleSpecifierLineSpacing, sizeof(CGFloat), &lineSpacing }
  352
+            { kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), &_textAlignment },
  353
+            { kCTParagraphStyleSpecifierLineBreakMode, sizeof(CTLineBreakMode), &_lineBreakMode },
  354
+            { kCTParagraphStyleSpecifierFirstLineHeadIndent, sizeof(CGFloat), &_firstLineHeadIndent },
  355
+            { kCTParagraphStyleSpecifierParagraphSpacing, sizeof(CGFloat), &_spacing },
  356
+            { kCTParagraphStyleSpecifierParagraphSpacingBefore, sizeof(CGFloat), &_topSpacing },
  357
+            { kCTParagraphStyleSpecifierLineSpacing, sizeof(CGFloat), &_lineSpacing }
263 358
         };
264 359
         
265 360
         CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(theSettings, theNumberOfSettings);
@@ -306,4 +401,9 @@ - (void)updateFrames
306 401
     }
307 402
 }
308 403
 
  404
+- (void)setPage:(NSInteger)page
  405
+{
  406
+    _page = page;
  407
+}
  408
+
309 409
 @end
27  Classes/Views/AKOMultiPageTextView.h
@@ -7,6 +7,8 @@
7 7
 //
8 8
 
9 9
 #import <UIKit/UIKit.h>
  10
+#import "AKOMultiColumnTextViewDataSource.h"
  11
+#import <CoreText/CoreText.h>
10 12
 
11 13
 @interface AKOMultiPageTextView : UIView <UIScrollViewDelegate>
12 14
 {
@@ -19,11 +21,36 @@
19 21
     NSInteger _columnCount;
20 22
     UIPageControl *_pageControl;
21 23
     BOOL _pageControlUsed;
  24
+    BOOL _scrollEnabled;
  25
+    
  26
+    CTLineBreakMode             _lineBreakMode;
  27
+    CTTextAlignment             _textAlignment;
  28
+    CGFloat                     _firstLineHeadIndent;
  29
+    CGFloat                     _spacing;
  30
+    CGFloat                     _topSpacing;
  31
+    CGFloat                     _lineSpacing;
  32
+    CGPoint                     _columnInset;
  33
+    
  34
+    id <AKOMultiColumnTextViewDataSource> _dataSource;
22 35
 }
23 36
 
24 37
 @property (nonatomic, copy) NSString *text;
25 38
 @property (nonatomic, retain) UIFont *font;
26 39
 @property (nonatomic, retain) UIColor *color;
27 40
 @property (nonatomic) NSInteger columnCount;
  41
+@property (nonatomic, assign)  BOOL scrollEnabled;
28 42
 
  43
+@property (nonatomic, assign, getter=getCurrentPageIndex) NSInteger currentPageIndex;
  44
+@property (nonatomic, assign, getter=getLastPageIndex) NSInteger lastPageIndex;
  45
+
  46
+@property (nonatomic, retain) UIPageControl     *pageControl;
  47
+@property (nonatomic, assign) CTLineBreakMode   lineBreakMode;
  48
+@property (nonatomic, assign) CTTextAlignment   textAlignment;
  49
+@property (nonatomic, assign) CGFloat           firstLineHeadIndent;
  50
+@property (nonatomic, assign) CGFloat           spacing;
  51
+@property (nonatomic, assign) CGFloat           topSpacing;
  52
+@property (nonatomic, assign) CGFloat           lineSpacing;
  53
+@property (nonatomic, assign) CGPoint           columnInset;
  54
+
  55
+@property (nonatomic, assign)     id <AKOMultiColumnTextViewDataSource> dataSource;
29 56
 @end
134  Classes/Views/AKOMultiPageTextView.m
@@ -9,15 +9,20 @@
9 9
 #import "AKOMultiPageTextView.h"
10 10
 #import "AKOMultiColumnTextView.h"
11 11
 
  12
+
  13
+@interface AKOMultiColumnTextView ()
  14
+- (void)setPage:(NSInteger)page;
  15
+@end
  16
+
12 17
 @interface AKOMultiPageTextView ()
13 18
 
14  
-@property (nonatomic, retain) UIPageControl *pageControl;
  19
+
15 20
 @property (nonatomic, retain) NSMutableArray *pages;
16 21
 @property (nonatomic, retain) UIScrollView *scrollView;
17 22
 @property (nonatomic) BOOL pageControlUsed;
18 23
 
19 24
 - (void)setup;
20  
-
  25
+- (void)changeColorForPageControl;
21 26
 @end
22 27
 
23 28
 
@@ -27,14 +32,31 @@ @implementation AKOMultiPageTextView
27 32
 @synthesize scrollView = _scrollView;
28 33
 @synthesize pageControl = _pageControl;
29 34
 @synthesize pageControlUsed = _pageControlUsed;
  35
+@synthesize dataSource = _dataSource;
  36
+@synthesize scrollEnabled = _scrollEnabled;
  37
+
  38
+@synthesize lineBreakMode = _lineBreakMode;
  39
+@synthesize textAlignment = _textAlignment;
  40
+@synthesize firstLineHeadIndent = _firstLineHeadIndent;
  41
+@synthesize spacing = _spacing;
  42
+@synthesize topSpacing = _topSpacing;
  43
+@synthesize lineSpacing = _lineSpacing;
  44
+@synthesize columnInset = _columnInset;
  45
+
  46
+
  47
+@synthesize currentPageIndex;
  48
+@synthesize lastPageIndex;
  49
+
30 50
 @dynamic text;
31 51
 @dynamic font;
32 52
 @dynamic columnCount;
33 53
 @dynamic color;
34 54
 
  55
+
  56
+
35 57
 - (id)initWithCoder:(NSCoder *)aDecoder
36 58
 {
37  
-    if (self = [super initWithCoder:aDecoder])
  59
+    if ((self = [super initWithCoder:aDecoder]))
38 60
     {
39 61
         [self setup];
40 62
     }
@@ -43,7 +65,7 @@ - (id)initWithCoder:(NSCoder *)aDecoder
43 65
 
44 66
 - (id)initWithFrame:(CGRect)frame 
45 67
 {
46  
-    if (self = [super initWithFrame:frame])
  68
+    if ((self = [super initWithFrame:frame]))
47 69
     {
48 70
         [self setup];
49 71
     }
@@ -52,22 +74,36 @@ - (id)initWithFrame:(CGRect)frame
52 74
 
53 75
 - (void)setup
54 76
 {
  77
+    _lineBreakMode = kCTLineBreakByWordWrapping;
  78
+    _textAlignment = kCTLeftTextAlignment;
  79
+    _firstLineHeadIndent = 0.0;
  80
+    _spacing = 5.0;
  81
+    _topSpacing = 0.0;
  82
+    _lineSpacing = 1.0;
  83
+    _columnCount = 2;
  84
+    _columnInset = CGPointMake(10.0, 10.0);
  85
+    _scrollEnabled = YES;
  86
+    
55 87
     self.pages = [NSMutableArray arrayWithCapacity:5];
56 88
     
57 89
     CGRect scrollViewFrame = CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height - 20.0);
58 90
     self.scrollView = [[[UIScrollView alloc] initWithFrame:scrollViewFrame] autorelease];
59  
-    self.scrollView.scrollEnabled = YES;
  91
+    self.scrollView.scrollEnabled = self.scrollEnabled;
60 92
     self.scrollView.bounces = YES;
61 93
     self.scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
62 94
     self.scrollView.pagingEnabled = YES;
63 95
     self.scrollView.delegate = self;
64 96
     
  97
+    
65 98
     CGRect pageControlFrame = CGRectMake(0.0, self.frame.size.height - 20.0, self.frame.size.width, 20.0);
66 99
     self.pageControl = [[[UIPageControl alloc] initWithFrame:pageControlFrame] autorelease];
67 100
     self.pageControl.numberOfPages = 2;
68  
-    self.pageControl.backgroundColor = [UIColor whiteColor];
  101
+    self.pageControl.backgroundColor = [UIColor clearColor];
69 102
     self.pageControl.currentPage = 0;
70  
-    self.pageControl.backgroundColor = [UIColor lightGrayColor];
  103
+    self.pageControl.hidden = NO;
  104
+    
  105
+    [self changeColorForPageControl];
  106
+    
71 107
     [self.pageControl addTarget:self
72 108
                          action:@selector(changePage:) 
73 109
                forControlEvents:UIControlEventValueChanged];
@@ -81,7 +117,9 @@ - (void)dealloc
81 117
     self.pageControl = nil;
82 118
     self.scrollView = nil;
83 119
     self.pages = nil;
84  
-
  120
+    self.dataSource = nil;
  121
+  
  122
+    
85 123
     [_text release];
86 124
     _text = nil;
87 125
     [_font release];
@@ -95,8 +133,12 @@ - (void)dealloc
95 133
 #pragma mark -
96 134
 #pragma mark UIScrollViewDelegate methods
97 135
 
  136
+
  137
+
98 138
 - (void)scrollViewDidScroll:(UIScrollView *)sender 
99 139
 {
  140
+    [self changeColorForPageControl];
  141
+    
100 142
     if (self.pageControlUsed) 
101 143
     {
102 144
         return;
@@ -105,6 +147,7 @@ - (void)scrollViewDidScroll:(UIScrollView *)sender
105 147
     CGFloat pageWidth = self.scrollView.frame.size.width;
106 148
     int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
107 149
     self.pageControl.currentPage = page;
  150
+    
108 151
 }
109 152
 
110 153
 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
@@ -117,18 +160,39 @@ - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
117 160
     self.pageControlUsed = NO;
118 161
 }
119 162
 
  163
+- (void)changeColorForPageControl
  164
+{
  165
+    for (NSUInteger subviewIndex = 0; subviewIndex < [self.pageControl.subviews	count]; subviewIndex++)
  166
+    {
  167
+        UIImageView* subview = [self.pageControl.subviews objectAtIndex:subviewIndex];
  168
+        if (subviewIndex == self.pageControl.currentPage)
  169
+        {
  170
+            if ([subview respondsToSelector:@selector(setImage:)])
  171
+            {
  172
+                [subview setImage:[UIImage imageNamed:@"page_dot_active.png"]];
  173
+            }
  174
+        }
  175
+        else
  176
+        {
  177
+            if ([subview respondsToSelector:@selector(setImage:)])
  178
+            {
  179
+                [subview setImage:[UIImage imageNamed:@"page_dot_inactive.png"]];
  180
+            }
  181
+        }
  182
+        
  183
+    }
  184
+}
  185
+
120 186
 #pragma mark -
121 187
 #pragma mark IBAction methods
122 188
 
123 189
 - (IBAction)changePage:(id)sender 
124 190
 {
125 191
     int page = self.pageControl.currentPage;
126  
-	
127 192
     CGRect frame = self.scrollView.frame;
128 193
     frame.origin.x = frame.size.width * page;
129 194
     frame.origin.y = 0;
130 195
     [self.scrollView scrollRectToVisible:frame animated:YES];
131  
-    
132 196
     self.pageControlUsed = YES;
133 197
 }
134 198
 
@@ -194,6 +258,36 @@ - (void)setColor:(UIColor *)newColor
194 258
     }
195 259
 }
196 260
 
  261
+
  262
+- (void)setDataSource:(id<AKOMultiColumnTextViewDataSource>)dataSource
  263
+{
  264
+    if (![_dataSource isEqual:dataSource])
  265
+    {
  266
+        _dataSource = dataSource;
  267
+         if (dataSource != nil)
  268
+         {
  269
+             [self setNeedsDisplay];
  270
+         }
  271
+    }
  272
+}
  273
+
  274
+
  275
+- (void)setScrollEnabled:(BOOL)scrollEnabled
  276
+{
  277
+    _scrollEnabled = scrollEnabled;
  278
+    self.scrollView.scrollEnabled = scrollEnabled;
  279
+}
  280
+
  281
+- (NSInteger)getCurrentPageIndex
  282
+{
  283
+    return self.pageControl.currentPage;
  284
+}
  285
+
  286
+- (NSInteger)getLastPageIndex
  287
+{
  288
+    return [_pages count]-1;
  289
+}
  290
+
197 291
 #pragma mark -
198 292
 #pragma mark Drawing code
199 293
 
@@ -212,13 +306,26 @@ - (void)drawRect:(CGRect)rect
212 306
     {
213 307
         CGRect currentFrame = CGRectOffset(self.scrollView.frame, self.scrollView.frame.size.width * iteration, 0.0);
214 308
         AKOMultiColumnTextView *view = [[[AKOMultiColumnTextView alloc] initWithFrame:currentFrame] autorelease];
  309
+        [view setPage:iteration];
215 310
         
  311
+        view.columnCount = self.columnCount;
216 312
         view.startIndex = currentPosition;
217 313
         view.text = self.text;
218 314
         view.font = self.font;
219  
-        view.columnCount = self.columnCount;
220 315
         view.color = self.color;
221  
-
  316
+        view.backgroundColor = self.backgroundColor;
  317
+        
  318
+        // set the properties
  319
+        view.lineBreakMode = _lineBreakMode;
  320
+        view.textAlignment = _textAlignment;
  321
+        view.firstLineHeadIndent = _firstLineHeadIndent;
  322
+        view.spacing = _spacing;
  323
+        view.topSpacing = _topSpacing;
  324
+        view.lineSpacing = _lineSpacing;
  325
+        view.columnInset = _columnInset;
  326
+
  327
+        view.dataSource = self.dataSource;
  328
+        
222 329
         [self.pages addObject:view];
223 330
         [self.scrollView addSubview:view];
224 331
 
@@ -231,6 +338,9 @@ - (void)drawRect:(CGRect)rect
231 338
     while (moreTextAvailable);
232 339
     self.pageControl.numberOfPages = iteration;
233 340
     self.pageControl.currentPage = 0;
  341
+    
  342
+    [self changeColorForPageControl];
  343
+    
234 344
 }
235 345
 
236 346
 @end
2  CoreTextWrapper.xcodeproj/project.pbxproj
@@ -53,6 +53,7 @@
53 53
 		3ACEB3A711E5D104005316CD /* PageController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PageController.xib; sourceTree = "<group>"; };
54 54
 		3ACEB3A911E5D112005316CD /* Entitlements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Entitlements.plist; sourceTree = "<group>"; };
55 55
 		8D1107310486CEB800E47090 /* CoreTextWrapper-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "CoreTextWrapper-Info.plist"; path = "../CoreTextWrapper-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = "<group>"; };
  56
+		DAEE4FDB137C68EB0054D8F6 /* AKOMultiColumnTextViewDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AKOMultiColumnTextViewDataSource.h; path = Classes/Helpers/AKOMultiColumnTextViewDataSource.h; sourceTree = SOURCE_ROOT; };
56 57
 /* End PBXFileReference section */
57 58
 
58 59
 /* Begin PBXFrameworksBuildPhase section */
@@ -196,6 +197,7 @@
196 197
 				3ACEB39011E5CFD4005316CD /* AKOMultiColumnTextView.m */,
197 198
 				3ACEB39111E5CFD4005316CD /* AKOMultiPageTextView.h */,
198 199
 				3ACEB39211E5CFD4005316CD /* AKOMultiPageTextView.m */,
  200
+				DAEE4FDB137C68EB0054D8F6 /* AKOMultiColumnTextViewDataSource.h */,
199 201
 			);
200 202
 			path = Views;
201 203
 			sourceTree = "<group>";
234  Resources/NIBs/PageController.xib
@@ -2,17 +2,18 @@
2 2
 <archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="7.10">
3 3
 	<data>
4 4
 		<int key="IBDocument.SystemTarget">800</int>
5  
-		<string key="IBDocument.SystemVersion">10F569</string>
6  
-		<string key="IBDocument.InterfaceBuilderVersion">788</string>
7  
-		<string key="IBDocument.AppKitVersion">1038.29</string>
  5
+		<string key="IBDocument.SystemVersion">10J3250</string>
  6
+		<string key="IBDocument.InterfaceBuilderVersion">1306</string>
  7
+		<string key="IBDocument.AppKitVersion">1038.35</string>
8 8
 		<string key="IBDocument.HIToolboxVersion">461.00</string>
9 9
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
10 10
 			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
11  
-			<string key="NS.object.0">117</string>
  11
+			<string key="NS.object.0">301</string>
12 12
 		</object>
13  
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
  13
+		<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
14 14
 			<bool key="EncodedWithXMLCoder">YES</bool>
15  
-			<integer value="2"/>
  15
+			<string>IBProxyObject</string>
  16
+			<string>IBUIView</string>
16 17
 		</object>
17 18
 		<object class="NSArray" key="IBDocument.PluginDependencies">
18 19
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -23,9 +24,7 @@
23 24
 			<object class="NSArray" key="dict.sortedKeys" id="0">
24 25
 				<bool key="EncodedWithXMLCoder">YES</bool>
25 26
 			</object>
26  
-			<object class="NSMutableArray" key="dict.values">
27  
-				<bool key="EncodedWithXMLCoder">YES</bool>
28  
-			</object>
  27
+			<reference key="dict.values" ref="0"/>
29 28
 		</object>
30 29
 		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
31 30
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -47,6 +46,7 @@
47 46
 						<int key="NSvFlags">274</int>
48 47
 						<string key="NSFrame">{{0, 96}, {1024, 652}}</string>
49 48
 						<reference key="NSSuperview" ref="766721923"/>
  49
+						<reference key="NSWindow"/>
50 50
 						<object class="NSColor" key="IBUIBackgroundColor" id="50803128">
51 51
 							<int key="NSColorSpace">3</int>
52 52
 							<bytes key="NSWhite">MQA</bytes>
@@ -58,6 +58,7 @@
58 58
 						<int key="NSvFlags">293</int>
59 59
 						<string key="NSFrame">{{312, 20}, {402, 68}}</string>
60 60
 						<reference key="NSSuperview" ref="766721923"/>
  61
+						<reference key="NSWindow"/>
61 62
 						<object class="NSColor" key="IBUIBackgroundColor">
62 63
 							<int key="NSColorSpace">3</int>
63 64
 							<bytes key="NSWhite">MQA</bytes>
@@ -68,14 +69,16 @@
68 69
 						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
69 70
 					</object>
70 71
 				</object>
71  
-				<string key="NSFrameSize">{1024, 748}</string>
  72
+				<string key="NSFrame">{{0, 20}, {1024, 748}}</string>
72 73
 				<reference key="NSSuperview"/>
  74
+				<reference key="NSWindow"/>
73 75
 				<reference key="IBUIBackgroundColor" ref="50803128"/>
74 76
 				<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
75 77
 				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
76 78
 					<int key="IBUIStatusBarStyle">2</int>
77 79
 				</object>
78 80
 				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
  81
+					<int key="IBUIInterfaceOrientation">3</int>
79 82
 					<int key="interfaceOrientation">3</int>
80 83
 				</object>
81 84
 				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
@@ -182,17 +185,13 @@
182 185
 			<object class="NSMutableDictionary" key="unlocalizedProperties">
183 186
 				<bool key="EncodedWithXMLCoder">YES</bool>
184 187
 				<reference key="dict.sortedKeys" ref="0"/>
185  
-				<object class="NSMutableArray" key="dict.values">
186  
-					<bool key="EncodedWithXMLCoder">YES</bool>
187  
-				</object>
  188
+				<reference key="dict.values" ref="0"/>
188 189
 			</object>
189 190
 			<nil key="activeLocalization"/>
190 191
 			<object class="NSMutableDictionary" key="localizations">
191 192
 				<bool key="EncodedWithXMLCoder">YES</bool>
192 193
 				<reference key="dict.sortedKeys" ref="0"/>
193  
-				<object class="NSMutableArray" key="dict.values">
194  
-					<bool key="EncodedWithXMLCoder">YES</bool>
195  
-				</object>
  194
+				<reference key="dict.values" ref="0"/>
196 195
 			</object>
197 196
 			<nil key="sourceID"/>
198 197
 			<int key="maxID">9</int>
@@ -205,7 +204,7 @@
205 204
 					<string key="superclassName">UIView</string>
206 205
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
207 206
 						<string key="majorKey">IBProjectSource</string>
208  
-						<string key="minorKey">Classes/Views/AKOCustomFontLabel.h</string>
  207
+						<string key="minorKey">./Classes/AKOCustomFontLabel.h</string>
209 208
 					</object>
210 209
 				</object>
211 210
 				<object class="IBPartialClassDescription">
@@ -213,7 +212,7 @@
213 212
 					<string key="superclassName">UIView</string>
214 213
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
215 214
 						<string key="majorKey">IBProjectSource</string>
216  
-						<string key="minorKey">Classes/Views/AKOMultiPageTextView.h</string>
  215
+						<string key="minorKey">./Classes/AKOMultiPageTextView.h</string>
217 216
 					</object>
218 217
 				</object>
219 218
 				<object class="IBPartialClassDescription">
@@ -253,201 +252,7 @@
253 252
 					</object>
254 253
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
255 254
 						<string key="majorKey">IBProjectSource</string>
256  
-						<string key="minorKey">Classes/Controllers/PageController.h</string>
257  
-					</object>
258  
-				</object>
259  
-			</object>
260  
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
261  
-				<bool key="EncodedWithXMLCoder">YES</bool>
262  
-				<object class="IBPartialClassDescription">
263  
-					<string key="className">NSObject</string>
264  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
265  
-						<string key="majorKey">IBFrameworkSource</string>
266  
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
267  
-					</object>
268  
-				</object>
269  
-				<object class="IBPartialClassDescription">
270  
-					<string key="className">NSObject</string>
271  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
272  
-						<string key="majorKey">IBFrameworkSource</string>
273  
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
274  
-					</object>
275  
-				</object>
276  
-				<object class="IBPartialClassDescription">
277  
-					<string key="className">NSObject</string>
278  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
279  
-						<string key="majorKey">IBFrameworkSource</string>
280  
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
281  
-					</object>
282  
-				</object>
283  
-				<object class="IBPartialClassDescription">
284  
-					<string key="className">NSObject</string>
285  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
286  
-						<string key="majorKey">IBFrameworkSource</string>
287  
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
288  
-					</object>
289  
-				</object>
290  
-				<object class="IBPartialClassDescription">
291  
-					<string key="className">NSObject</string>
292  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
293  
-						<string key="majorKey">IBFrameworkSource</string>
294  
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
295  
-					</object>
296  
-				</object>
297  
-				<object class="IBPartialClassDescription">
298  
-					<string key="className">NSObject</string>
299  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
300  
-						<string key="majorKey">IBFrameworkSource</string>
301  
-						<string key="minorKey">Foundation.framework/Headers/NSNetServices.h</string>
302  
-					</object>
303  
-				</object>
304  
-				<object class="IBPartialClassDescription">
305  
-					<string key="className">NSObject</string>
306  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
307  
-						<string key="majorKey">IBFrameworkSource</string>
308  
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
309  
-					</object>
310  
-				</object>
311  
-				<object class="IBPartialClassDescription">
312  
-					<string key="className">NSObject</string>
313  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
314  
-						<string key="majorKey">IBFrameworkSource</string>
315  
-						<string key="minorKey">Foundation.framework/Headers/NSPort.h</string>
316  
-					</object>
317  
-				</object>
318  
-				<object class="IBPartialClassDescription">
319  
-					<string key="className">NSObject</string>
320  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
321  
-						<string key="majorKey">IBFrameworkSource</string>
322  
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
323  
-					</object>
324  
-				</object>
325  
-				<object class="IBPartialClassDescription">
326  
-					<string key="className">NSObject</string>
327  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
328  
-						<string key="majorKey">IBFrameworkSource</string>
329  
-						<string key="minorKey">Foundation.framework/Headers/NSStream.h</string>
330  
-					</object>
331  
-				</object>
332  
-				<object class="IBPartialClassDescription">
333  
-					<string key="className">NSObject</string>
334  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
335  
-						<string key="majorKey">IBFrameworkSource</string>
336  
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
337  
-					</object>
338  
-				</object>
339  
-				<object class="IBPartialClassDescription">
340  
-					<string key="className">NSObject</string>
341  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
342  
-						<string key="majorKey">IBFrameworkSource</string>
343  
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
344  
-					</object>
345  
-				</object>
346  
-				<object class="IBPartialClassDescription">
347  
-					<string key="className">NSObject</string>
348  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
349  
-						<string key="majorKey">IBFrameworkSource</string>
350  
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
351  
-					</object>
352  
-				</object>
353  
-				<object class="IBPartialClassDescription">
354  
-					<string key="className">NSObject</string>
355  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
356  
-						<string key="majorKey">IBFrameworkSource</string>
357  
-						<string key="minorKey">Foundation.framework/Headers/NSXMLParser.h</string>
358  
-					</object>
359  
-				</object>
360  
-				<object class="IBPartialClassDescription">
361  
-					<string key="className">NSObject</string>
362  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
363  
-						<string key="majorKey">IBFrameworkSource</string>
364  
-						<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
365  
-					</object>
366  
-				</object>
367  
-				<object class="IBPartialClassDescription">
368  
-					<string key="className">NSObject</string>
369  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
370  
-						<string key="majorKey">IBFrameworkSource</string>
371  
-						<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
372  
-					</object>
373  
-				</object>
374  
-				<object class="IBPartialClassDescription">
375  
-					<string key="className">NSObject</string>
376  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="786211723">
377  
-						<string key="majorKey">IBFrameworkSource</string>
378  
-						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
379  
-					</object>
380  
-				</object>
381  
-				<object class="IBPartialClassDescription">
382  
-					<string key="className">UIResponder</string>
383  
-					<string key="superclassName">NSObject</string>
384  
-					<reference key="sourceIdentifier" ref="786211723"/>
385  
-				</object>
386  
-				<object class="IBPartialClassDescription">
387  
-					<string key="className">UISearchBar</string>
388  
-					<string key="superclassName">UIView</string>
389  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
390  
-						<string key="majorKey">IBFrameworkSource</string>
391  
-						<string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
392  
-					</object>
393  
-				</object>
394  
-				<object class="IBPartialClassDescription">
395  
-					<string key="className">UISearchDisplayController</string>
396  
-					<string key="superclassName">NSObject</string>
397  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
398  
-						<string key="majorKey">IBFrameworkSource</string>
399  
-						<string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
400  
-					</object>
401  
-				</object>
402  
-				<object class="IBPartialClassDescription">
403  
-					<string key="className">UIView</string>
404  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
405  
-						<string key="majorKey">IBFrameworkSource</string>
406  
-						<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
407  
-					</object>
408  
-				</object>
409  
-				<object class="IBPartialClassDescription">
410  
-					<string key="className">UIView</string>
411  
-					<string key="superclassName">UIResponder</string>
412  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
413  
-						<string key="majorKey">IBFrameworkSource</string>
414  
-						<string key="minorKey">UIKit.framework/Headers/UIView.h</string>
415  
-					</object>
416  
-				</object>
417  
-				<object class="IBPartialClassDescription">
418  
-					<string key="className">UIViewController</string>
419  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
420  
-						<string key="majorKey">IBFrameworkSource</string>
421  
-						<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
422  
-					</object>
423  
-				</object>
424  
-				<object class="IBPartialClassDescription">
425  
-					<string key="className">UIViewController</string>
426  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
427  
-						<string key="majorKey">IBFrameworkSource</string>
428  
-						<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
429  
-					</object>
430  
-				</object>
431  
-				<object class="IBPartialClassDescription">
432  
-					<string key="className">UIViewController</string>
433  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
434  
-						<string key="majorKey">IBFrameworkSource</string>
435  
-						<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
436  
-					</object>
437  
-				</object>
438  
-				<object class="IBPartialClassDescription">
439  
-					<string key="className">UIViewController</string>
440  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
441  
-						<string key="majorKey">IBFrameworkSource</string>
442  
-						<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
443  
-					</object>
444  
-				</object>
445  
-				<object class="IBPartialClassDescription">
446  
-					<string key="className">UIViewController</string>
447  
-					<string key="superclassName">UIResponder</string>
448  
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
449  
-						<string key="majorKey">IBFrameworkSource</string>
450  
-						<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
  255
+						<string key="minorKey">./Classes/PageController.h</string>
451 256
 					</object>
452 257
 				</object>
453 258
 			</object>
@@ -463,8 +268,7 @@
463 268
 			<integer value="3100" key="NS.object.0"/>
464 269
 		</object>
465 270
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
466  
-		<string key="IBDocument.LastKnownRelativeProjectPath">../../CoreTextWrapper.xcodeproj</string>
467 271
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
468  
-		<string key="IBCocoaTouchPluginVersion">117</string>
  272
+		<string key="IBCocoaTouchPluginVersion">301</string>
469 273
 	</data>
470 274
 </archive>

0 notes on commit 9378ecd

Please sign in to comment.
Something went wrong with that request. Please try again.