在我的项目中,基本视图是 UITabBarController 。它连接到 UISplitViewController 和 UINavigationViewController 。我想以编程方式设置 tabBarItem 的图标。我尝试的第一种方法是在 UITabBarController 的子类中设置它们。它没用。接下来,我尝试对每个连接的视图进行子类化,并在每个视图的 viewDidLoad 方法上设置 tabBarItem ,如下所示:
bool maze[20][20];
void initMaze()
{
for(int i = 0; i < 20; i++)
for(int j = 0; j < 20; j++)
maze[i][j] = false;
for(int i = 0; i < 20; i++)
maze[0][i] = true;
for(int i = 0; i < 20; i++)
maze[19][i] = true;
for(int i = 0; i < 20; i++)
maze[i][0] = true;
for(int i = 0; i < 20; i++)
maze[i][19] = true;
}
int randNum(int min, int max)
{
return rand()%(max-min+1)+min;
}
void drawVWall(int minY, int maxY, int x)
{
int passage = randNum(minY, maxY);
for(int i = minY; i <= maxY; i++)
if(i != passage)
maze[i][x] = true;
}
void drawHWall(int minX, int maxX, int y)
{
int passage = randNum(minX, maxX);
for(int i = minX; i <= maxX; i++)
if(i != passage)
maze[y][i] = true;
}
void divison(int x, int y, int maxx, int maxy, int h)
{
if(h)
{
if(maxx <= 2)
return;
int wallY = randNum(y, maxy);
drawHWall(x, maxx, wallY);
if(wallY < maxy - wallY)
divison(x, wallY, maxx, maxy, !h);
else if(wallY > maxy - wallY)
divison(x, y, maxx, wallY, !h);
}
else
{
if(maxy <= 2)
return;
int wallX = randNum(x, maxx);
drawVWall(y, maxy, wallX);
if(wallX < maxx - wallX)
divison(wallX, y, maxx, maxy, !h);
else if(wallX > maxx - wallX)
divison(x, y, wallX, maxy, !h);
}
}
initMaze();
divison(2, 2, 18, 18, true);
要显示的默认视图是 splitView 。加载应用后,它会显示 tabView 的 tabBarItem ,但在用户未单击其他标签栏项目之前,它是空的。
在点击第二个标签栏项目之前:
点击第二个标签栏项目后:
答案 0 :(得分:1)
在您实际显示第二个视图后,未加载第二个视图。它以“懒惰”模式加载 - 就在它第一次访问时。 这是一个优化,在应用程序启动时没有出现巨大的加载峰值,对于最初看不到的东西。
将代码添加到两个类的- (id)initWithCoder:(NSCoder*)aDecoder
函数中 - 当为UITabBarViewController中的每个UIViewController加载应用程序时调用它。
向前迈进一步,以防万一有人通过代码初始化你的ViewControllers - 尽管有初始化方法,最好的方法是使用单独的函数来配置这样的东西 - 尽管有初始化方法。
class BaseSplitViewController: UISplitViewController {
override init(frame: CGRect) {
super.init(frame: frame)
configureViewController()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
configureViewController()
}
private func configureViewController() {
let searchIcon = UIImage.fontAwesomeIcon(name: .search, textColor: UIColor.black, size: CGSize(width: 40, height: 40))
let baseSplitViewBarItem = UITabBarItem(title: "Search", image: searchIcon, selectedImage: searchIcon)
self.tabBarItem = baseSplitViewBarItem
}
}